性格悪い人が優勝

```
#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
```

A 回答 (2件)

> char str[] = "str == NULL ? \"(NULL)\" : str";


> の中身は "str == NULL ? \"(NULL)\" : str"
> 一回目のループで中身はstr == NULL ? \"(NULL)\" : str、二回目のループでstr == NULL
> 三回目のループでstr == NULLとなんだか想像したのと違った結果になります。

ゴメン、もう何だか日本語がメチャクチャなんで読むに耐えないです。
混乱してるのは分かるけど、日本語が混乱しててどーする。

しかもね。

> 一回目のループで中身はstr ...

とか書いてるけど、字面通りに受け取ると

「何回目のループだろうとstrの中身は変わりません」

なんか既に前提で勘違いしてるんじゃなかろうか。
このコード上だと、まずはstrは不変ですよ。何も変わってはいない。
ポインタpやqが動いてるだけでstrは全然変わってない。

日本語の問題か?そもそも動作が分かってないから日本語の文章がメチャクチャになってんのか?
その辺よう分からんのですけど。

> str[]の中身はforループによって以下のように変化します。
> **char* p = str[]より、str[]の中身はpに代入しているためstr[]に影響はないと思ったのですが。**
> 最初はchar str[] = { "abcde" };の中身はabcdeでしたが、一回目のループでb> bcde、二回目でbccde、三回目bcdde
> 四回目bcdee

ゴメン、何言ってんだかサッパリ分からんわ。

初期状態:
char str[] = "abcde";

1回目:
char str[] = "bbcde";

2回目:
char str[] = "bccde";

3回目:
char str[] = "bcdde";

4回目:
char str[] = "bcdee";

最終状態:
char str[] = "bcdef";

になりますが、何か問題でも?
単にその通りですよ。

> str[]の中身はpに代入しているため

中身はpには代入「出来ません」。
    • good
    • 1
この回答へのお礼

どうもありがとうございます。
ちゃんと質問を読んでから回答してください。お互いに語力が足りないですよ。

お礼日時:2021/02/16 16:36

> ちゃんと質問を読んでから回答してください。

お互いに語力が足りないですよ。

それは間違ってますよ。
もし、その「質問」が

> https://oshiete.goo.ne.jp/qa/12209240.html

を指してるのなら、ぶっちゃけて言いますが、こういう「連投」は禁止です。
原則各質問は独立してないといけない。
こういうカタチの関連質問はここの規約上やってはいけないのです。
お分かりですか?

以前の質問にも他の回答者がポインタに文字列なんぞ代入出来ない、と書いています(そもそもC言語には「文字列」なんぞ存在せん、って事も皆言ってます)。
貴方はそれを「キチンと理解した」とも思えない。
その上で連投してるんです。
間違ってるのは貴方の方なんですよ。

他の質問者が書いてる事をまずキチンと理解しましょう。
そしてその質問内でやり取りしましょう。

こういうカタチの「連投」は、もう一度言いますが、原則ここの規約上はやってはならないことなのです。
    • good
    • 2
この回答へのお礼

すいませんでした。気をつけます。

お礼日時:2021/02/16 18:11

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