c89 gcc (GCC) 4.6.3
你好,
我在*search =‘\0’上得到一个堆栈转储;我认为可以nul终止一个字符串。
char *ptr_name = "hello@home";
char *search = ptr_name;
search = strchr(ptr_name, '@');
search++;
*search = '\0';非常感谢您的建议,
发布于 2012-04-25 18:13:40
char *ptr_name = "hello@home";创建一个字符串常量,该常量不能修改。
要获得预期的结果,您需要使用数组char arr_name[] = "hello@home";为"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@
$发布于 2012-04-25 18:10:54
ptr_name指向只读区域中的字符串。
相反,请尝试:
char ptr_name[] = "hello@home"发布于 2012-04-25 18:11:32
当它是一个文字常量时,你不能这样做。你可以把它strcpy()到一个堆栈或堆变量中,然后你就可以修改它了。
https://stackoverflow.com/questions/10313510
复制相似问题