C89 gcc(GCC)4.6.3
您好,
我在* search ='\ 0'上获得堆栈转储;我认为有可能无法终止字符串。
char *ptr_name = "hello@home";
char *search = ptr_name;
search = strchr(ptr_name, '@');
search++;
*search = '\0';
非常感谢任何建议,
答案 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@
$