🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

3回答

2106閲覧

j++の役割がわからない。また%sはメモリのアドレスからの文字コードしか表示できないのでしょうか?

carnage0216

総合スコア194

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2021/02/05 13:05

編集2021/02/06 00:02
int i=0, j; p = str; for (;;) { for (q = p, j = i; !(*q == '?' || *q == ':' || *q == 0); q++, j++); ch = *q; *q = 0; printf("|%s|\n", &str[i]); if (ch == 0) break; p = q + 1; i = j + 1; } }

j++おいて、j++の役割は何なのでしょうか?
デバッグを掛けてみましたがいまいちわからなくて。

また因子%sにおいて、
%sは文字を表すための因子ですが、ポインタなどで指定されたメモリからのアドレスからの文字コードなどのデータしか扱えないのでしょうか?

こちらが全体のコードです。

#include <stdio.h> #include <string.h> int main(void) { char str[] = "str == NULL ? \"(NULL)\" : str"; char* p, * q; int ch; int i=0, j; p = str; for (;;) { for (q = p, j = i; !(*q == '?' || *q == ':' || *q == 0); q++, j++); ch = *q; *q = 0; printf("|%s|\n", &str[i]); if (ch == 0) break; p = q + 1; i = j + 1; } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2021/02/05 22:46

逆に、何故わからないのでしょうか
Zuishin

2021/02/05 23:01

いや、私もわかりません。これ j 要りますか? 何か重要な部分が省略されてる気がします。
kazuma-s

2021/02/05 23:19

> また因子%sにおいて、 %sは文字を表すための因子ですが、 「因子」とは何ですか? どこからその用語を持ってきましたか? %s は printf の書式文字列における変換指定です。 「文字を表す」という表現も不適切です。
m.ts10806

2021/02/06 00:06 編集

>自分で書いたコードの意味がわからないという意味不明な質問です。 ずっとそんな感じですよね。 自分が書いたコードを他人に説明させるのってどういうことなの?と。 デバッグしても分からないって、デバッグできてないということに他ならない。 「デバッグ」って何かわかってます?そういう名前のお菓子ではないですよ。
Zuishin

2021/02/06 00:19

追記された全体のコードを見ても j は不要ですね。使う意味がないのでこの意味を探る価値もありません。自分の書いたコードではなく、オリジナルの方を読んで理解してから変更するべきです。
guest

回答3

0

%sは文字を表すための因子ですが、ポインタなどで指定されたメモリからのアドレスからの文字コードなどのデータしか扱えないのでしょうか?

違います。文字を表すためのものです(文字を表すものとしては%cがあり、こちらは変数やリテラルに入った文字を指定することも可能です)。

C言語では、「文字列」という型は存在せず、「連続してメモリに配置され、最後に\0が入った文字の一群」を文字列として扱っています。

投稿2021/02/05 13:26

maisumakun

総合スコア145967

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

j++

ですが、分解すると

j=j+1

のことです。

前後のコードが無いので何ともですが
ご提示されているコードでの役割としては、

i = j + 1

としていることから、恐らくstrに格納している文字列を順に出力するための役割を担っていると思われます。
※strはchar**などの2次元配列などではないでしょうか?

ポインタなどで指定されたメモリからのアドレスからの文字コードなどのデータしか扱えないのでしょうか?

%s自体が文字列参照のためのフォーマットですので、
その認識で大筋問題ありません。
※文字コードというか、文字列ですね。

10進、2進、16進数、アドレスなどで扱いたい場合は、
printfのフォーマット指定の使い分けで
実現する形となります。

投稿2021/02/05 13:22

WhiteTempest

総合スコア404

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

carnage0216

2021/02/06 00:12 編集

ありがとうございます。
guest

0

p == &str[i]
q == &str[j]

の関係にあるようです。それを維持するために、

q++ に伴って
j++ しているし、

p = q + 1 に伴って
i = j + 1 しています。

裏を返せば、冒頭の関係であることから、
p,qの組 あるいは i,jの組 いずれかは不要です。

投稿2021/02/05 18:03

編集2021/02/06 00:32
episteme

総合スコア16612

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

carnage0216

2021/02/13 14:02

エピカスさん、過去の件にはほんとに感謝してる。だけどもう二度と私の質問に来ないでくださいね。 後、ツイッターで嫌がらせするのもやめてくださいね。 こんな人間に育てられた息子がかわいそうだ。あんたには下心しかない。男の穴にしか興味ないみたいだからな。そんなわけでこの解答もできるなら消して二度と姿も名前も見せないでね。ナメクジ面も。
episteme

2021/02/13 14:06 編集

↑僕に対する誹謗中傷なので通報しました。 # 質問に答えるか否かはあなたが決めることではない、質問を公の場に置いたのだから。
carnage0216

2021/02/13 14:15

はいはい、勝手にしろ。ほんとマゾだな。
episteme

2021/02/13 14:23

ではお言葉に甘え勝手にします。 もともと質問も回答も勝手にする場ではありますが。 マゾ? あなたは「羞恥心や屈辱感を誘導」したいのですか?
carnage0216

2021/02/13 14:41

だって罵声浴びせられても来るじゃん、、、これってマゾでは? なんか疲れるわ。
episteme

2021/02/13 14:53 編集

罵声吐いた分あなたの品位が落ちるだけですから。そりゃ疲れるでしょうよ。
carnage0216

2021/02/13 14:58

罵声を浴びさせられる行いをしてきたからなんだけどな。そんなことも忘れるとはボケたのか? ご老人はもう寝たほうがいい。
episteme

2021/02/13 15:13

なんにせよ解決してなによりです。
carnage0216

2021/02/14 16:04 編集

解決できたのは皆様のおかげだし、過去に作りたいものに関して力を貸してくれたあなたのおかげです。 それは本当に感謝しています。
episteme

2021/02/15 00:20

だからなぁに? 暴言を許せとでも?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問