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';
非常感谢您的任何建议,
ptr_name 指向只读区域中的字符串。
而是尝试:
char ptr_name[] = "hello@home"
不是当它是一个字面常量时,你不能。您可以将其 strcpy() 放入堆栈或堆变量中,然后您可以对其进行修改。
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@
$