1,質問があります。
#include <stdio.h> #include <string.h> int main(void) { char str[] = "str == NULL ? \"(NULL)\": str"; char* p, * q; int ch; p = str; for (;;) { for (q = p; !(*q == '?' || *q == ':' || *q == 0); q++); ch = *q; *q = 0; printf("|%s|\n", p); if (ch == 0) break; p = q + 1; } }
の!(*q == '?' || *q == ':' || *q == 0);において、なぜ'?'、':'、 0を否定しているのにchには'?'、':'、 0が代入され、内部処理が働くのでしょうか?
ch = *q; *q = 0; printf("|%s|\n", p); if (ch == 0) break; p = q + 1;
2,質問
#include <stdio.h> #include <string.h> int main(void) { char str[] = "str == NULL ? \"(NULL)\": str"; char* p, * q; int ch; p = str; for (;;) { for (q = p; !(*q == '?' || *q == ':' || *q == 0); q++); ch = *q; *q = 0; printf("|%s|\n", p); if (ch == 0) break; p = q + 1; } }
の!(*q == '?' || *q == ':' || *q == 0);を(*q == '?' || *q == ':' || *q == 0);とした場合、画像のようなエラーが出るのですが、なぜでしょうか?また(*q == '?' || *q == ':' || *q == 0);とした場合、どのような処理のプログラムになるのでしょうか?
3,最後に以下のようにプログラムを書くと
#include <stdio.h> #include <string.h> int main(void) { char str[] = "str == NULL ? \"(NULL)\": str"; char* p, * q; int ch; p = str; for (;;) { for (q = p; !(*q == '?' || *q == ':' || *q == 0); q++) { ch = *q; *q = 0; printf("|%s|\n", p); if (ch == 0) break; p = q + 1; } } }
以下のようなバグが起きました。これはバグということでかたずけていいでしょうか?
というか、なぜこの様な実行結果になったのかが、わかりません。
|| || || || || || || || || || || ||