プロが教える店舗&オフィスのセキュリティ対策術

#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; } } において、 cahr型は文字や文字列、文字としての数字や数字の列を表す文字コードなどを数値として扱い、 char* pは文字や文字列や文字としての数字や数字の列の先頭のアドレスを数値として扱い、 *qは一つの文字や文字としての数字を文字コードなどを数値として扱う。そのため、整数などの値を扱うint型のchに数値として渡せるため ch = *q;と出来たのでしょうか? もう一つ、疑問があるのですが、なぜforの二周目以降のデバッグでのstr[]の中身はstr == NULLであるのに、一週目のstr[]の中身はstr == NULL ? \"(NULL)\": strであるかについてです。 過去にforの一週目のカッコの中身、すなわち(q = p; !(*q == '?' || *q == ':' || *q == 0); q++)のq++は働かないと聞きました。q++が働かなったためにqには0や値すらも入らないためp = q + 1;が動かず、一週目のstr[]の中身はstr == NULL ? \"(NULL)\": strなのかなと考えてみたのですが、正しいでしょうか。

gooドクター

A 回答 (1件)

>なぜforの二周目以降のデバッグでのstr[]の中身はstr == NULL



strは配列名なので、NULLになることは無いです。デバッグの仕方が間違ってるのでは。
とりあえず実行してみたもの→ https://paiza.io/projects/YpNukdGtIpBc6c9zonKOdw

※なんかどっかで見たことある質問だなあと思ったら、captain06さんの 2021年2月ごろの質問と同系統かしら。

https://oshiete.goo.ne.jp/qa/12209274.html
    • good
    • 2

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

人気Q&Aランキング