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;
}
}
あなたは含めるのを忘れて:あなたはこのような何かをやっている場合は
、あなたは配列を使用することによって、それは修正しなければならない:私の疑惑は、次のような、読み取り専用の文字列で渡しています問題の原因となるサンプル入力。 –
while(strlen(line)) 'は基本的に無限ループです。そして、あなたは 'linep'がどのように初期化されたのか私たちには知らせませんでした。未割り当てメモリに書き込むことができます。 –
@ Jean-FrançoisFabrebreakはほとんど常に起こりますが、 '\ 0'を含む場所へのポインタが与えられていればstrlenは0を返しません。 – user3504732