私は、配列のメンバーをループして文字をスキャンして、特定の文字を探す簡単なプログラムを作成しようとしています。私はstrcmp()
がループの始めにしか動かない問題に遭遇しました。私はこれがなぜ起こり、どんな助けが評価されるのか理解するのに苦労しています。strcmpはループの最初でのみ動作します
char *file[3] = {"!x", "!!x", "x!"};
for (int i = 0; i < sizeof(file)/sizeof(file[0]); i++) {
char *line = file[i];
printf("\n");
for (int i = 0; i < strlen(line); i = i + 1) {
char character = line[i];
if (strcmp("!", &character) == 0) {
printf("[YES] %c\n", character);
} else {
printf("[NO] %c\n", character);
}
}
}
出力は
[YES] ! [NO] x [YES] ! [NO] ! [NO] x [NO] x [NO] !
なぜ**文字列比較関数を使用して単一の**文字**を比較しますか? – Olaf
あなたは未定義の振る舞いをしているかもしれません。文字列ではないので、charのポインタのどこかにゼロがあることを保証するものはありません。 –
ここでヌル終端文字列が必要であるというコメントは、もちろん正しいです。この場合、文字列中の残りの文字を知っているので、 '&character'の後ろに何が来るのか知っているので、動作は変わっていません。それがなぜこの特定の方法で不正行為をするのかはわかりません。 – Brick