ここで与えられた答えを少しだけ拡張します(すべて優れています)... Cを始めたばかりのときに、これに何度も遭遇しましたが、それは簡単な間違いです。
ループを簡単に調整するwhile
と修正されます。他の誰もが理由を教えてくれました。
#include <stdio.h>
int main() {
char *s = "lolololololololol";
while (*s != '\0') {
printf("%c", *s);
s++;
}
}
無限ループ ( while(1)
) の代わりに、プルしているポインターが文字列の null ターミネーターではないことを確認するためにループ チェックを行っていることに注意してください。これにより、発生しているオーバーランが回避されます。
絶対に必要な場合while(1)
(たとえば、これが宿題であり、インストラクターが使用を求めている場合) は、break
キーワードを使用してループを終了します。次のコードは、少なくとも私にはにおいがしますが、機能します。
#include <stdio.h>
int main() {
char *s = "lolololololololol";
while (1) {
if (*s == '\0')
break;
printf("%c", *s);
s++;
}
}
どちらも同じコンソール出力を生成しますが、最後に改行はありません。
ロロロロロロロル