#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; } }
のプログラムをデバッグした際に char str[] = "str == NULL ? "(NULL)" : str";
の中身は "str == NULL ? "(NULL)" : str"
一回目のループで中身はstr == NULL ? "(NULL)" : str、二回目のループでstr == NULL
三回目のループでstr == NULLとなんだか想像したのと違った結果になります。
なぜでしょうか?
そして、
こちらのプログラムでは
#include <stdio.h> int main(void) { char str[] = "abcde" ; for (char* p = str; *p; ++p) { ++(*p); printf("%s\n", &(*p)); } }
str[]の中身はforループによって以下のように変化します。
char p = str[]より、str[]の中身はpに代入しているためstr[]に影響はないと思ったのですが。*
最初はchar str[] = { "abcde" };の中身はabcdeでしたが、一回目のループでbbcde、二回目でbccde、三回目bcdde
四回目bcdee
bbcde ccde dde ee f