2016-11-30 5 views
0

printステートメントは期待どおりに実行され、ステートメントにline[0]を印刷すると、期待どおりに印刷されます。しかし、gdbは、そのifの記述にsegfaultがあることを伝えます。 stringの文字にアクセスする方法を誤解していますか?Segfaultを文字列への逆参照ポインタに割り当てる場合

EDITED CODE問題のあるループのスタイルを無視

void setflags(char** linep) 
{ 
    char* line = *linep; 
    while(strlen(line)) 
    { 
    printf("%s\n",line); 
    if (line[0] == '.') 
     line[0] = '*'; 
    else if (line[0] == ' ') 
     (*linep) ++; 
    else 
     break; 
    line = *linep; 
    } 
} 
+0

あなたは含めるのを忘れて:あなたはこのような何かをやっている場合は

char *string = "this is read-only string literal"; setflags(&string); // error 

、あなたは配列を使用することによって、それは修正しなければならない:私の疑惑は、次のような、読み取り専用の文字列で渡しています問題の原因となるサンプル入力。 –

+1

while(strlen(line)) 'は基本的に無限ループです。そして、あなたは 'linep'がどのように初期化されたのか私たちには知らせませんでした。未割り当てメモリに書き込むことができます。 –

+0

@ Jean-FrançoisFabrebreakはほとんど常に起こりますが、 '\ 0'を含む場所へのポインタが与えられていればstrlenは0を返しません。 – user3504732

答えて

0

IRRELEVANTエラーを取り除く、あなたのワンセグ障害が診断可能なのではないあなたは、この機能を使用している方法を示しまでです。

char string[] = "this is a modifiable character array"; 
setflags(&string); // no error 
関連する問題