2011-08-03 22 views
0

可能性の重複:
Memory Allocation char* and char[]Segementation障害(コアダンプ)

なぜ次のプログラムは、実行時にセグメンテーションフォールトを与えるのでしょうか?

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

main() 
{ 
    char * str = "Have a. nice, day :)"; 
    char * ptr; 

    ptr = strtok(str, " .,"); 

    printf("%s",ptr); 
} 

ただし、char str [] = "Have a nice、day :)"を使用すると、それは私に出力を与える。なぜstrtokの定義はchar * strcpy(char *、const char *)?〜

答えて

4

strtokが文字列リテラルを指す引数strを変更しても、エラーを返すのですが、文字列リテラルを変更すると未定義の動作が発生します。非constのchar*を文字列リテラルで初期化することは、実際は廃止されました。

str[]と書くと、strは文字列で初期化された可変配列になります。

0

strtokは、渡された文字列を変更します。私はchar * = "literal string"とは何かがあると思われます。char [] = "literal string"はスタックにバッファを割り当て、最初の内容は.dataセクション。