2012-04-25 63 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()將它變成堆棧或堆變量,然後你可以修改它。