2012-04-25 60 views
0

C89 GCC(GCC)4.6.3NUL终止指针

您好,

我得到一个堆栈转储*搜索= '\ 0';我认为可以终止一个字符串。

char *ptr_name = "[email protected]"; 
char *search = ptr_name; 

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

非常感谢您的任何建议,

+0

你可能写常量数据。 – Nick 2012-04-25 10:09:43

+0

http://c-faq.com/decl/strlitinit.html – cnicutar 2012-04-25 10:09:53

+0

'ptr_name'不是一个字符串。它是一个指向(只读)字符串的指针。 – pmg 2012-04-25 10:10:14

回答

1

char *ptr_name = "[email protected]";创建一个字符串常量,并且不能修改。

为了得到您期待的结果,您需要使用数组char arr_name[] = "[email protected]";"[email protected]"分配内存 - 或者在运行时动态使用malloc

你的程序如下:

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

int main() 
{ 
    char arr_name[] = "[email protected]"; 
    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 
[email protected] 
[email protected] 
$ 
1

不是当它是一个文字常量,你不能。你可以strcpy()将它变成堆栈或堆变量,然后你可以修改它。