nul终止指针

时间:2012-04-25 10:07:51

标签: c pointers

C89     gcc(GCC)4.6.3

您好,

我在* search ='\ 0'上获得堆栈转储;我认为有可能无法终止字符串。

char *ptr_name = "hello@home";
char *search = ptr_name;

search = strchr(ptr_name, '@');
search++;
*search = '\0';

非常感谢任何建议,

3 个答案:

答案 0 :(得分:2)

ptr_name指向只读区域中的字符串。

而是尝试:

char ptr_name[] = "hello@home"

答案 1 :(得分:1)

不是当它是文字const时,你不能。你可以将它strcpy()转换为堆栈或堆变量,然后你可以修改它。

答案 2 :(得分:1)

char *ptr_name = "hello@home";创建一个字符串常量,无法修改。

要获得您期望的结果,您需要使用数组"hello@home"char arr_name[] = "hello@home";分配内存 - 或者在运行时动态使用malloc

您的计划应如下:

#include <stdio.h>
#include <string.h>

int main()
{
    char arr_name[] = "hello@home";
    char *search = arr_name;

    printf("%s \n", arr_name);
    search = strchr(arr_name, '@');
    search++;
    *search = '\0';

    printf("%s \n", arr_name);

    return 0;
}

输出:

$ ./a.out 
hello@home 
hello@ 
$