0

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';

非常感谢您的任何建议,

4

3 回答 3

2

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

而是尝试:

char ptr_name[] = "hello@home"
于 2012-04-25T10:10:54.150 回答
1

不是当它是一个字面常量时,你不能。您可以将其 strcpy() 放入堆栈或堆变量中,然后您可以对其进行修改。

于 2012-04-25T10:11:32.347 回答
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@ 
$
于 2012-04-25T10:13:39.850 回答