質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.50%
C

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

Q&A

解決済

2回答

1563閲覧

p1>str1 の指す内容 とは?

humizukihanya

総合スコア7

C

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

0グッド

0クリップ

投稿2016/05/29 05:50

編集2016/05/29 05:52

このソースコードは文字型配列str1に格納されている文字列をポインタ2つ用いて文字型配列str2に逆順に格納するというものなのですが、
while(p1>str1) のp1>str1がどのような内容の条件かわかりません。
教えてください。

C

1 2#include <stdio.h> 3 4int main( void ) 5{ 6 char str1[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 7 char str2[30]; 8 char *p1, *p2; 9 10 p1 = str1; 11 p2 = str2; 12 13 while ( *p1 != '\0' ) { 14 p1++; 15 } 16 while (p1 > str1) { 17 p1--; 18 *p2 = *p1; 19 p2++; 20 } 21 *p2 = '\0'; 22 printf( "str1 = %s\n", str1 ); 23 printf( "str2 = %s\n", str2 ); 24 25 return 0; 26}

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

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

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

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

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

guest

回答2

0

ベストアンサー

メモリ上のとある位置 X に"A~Z\0"というデータが存在していて先頭アドレス X を str1 が保持しています。
最初のループで p1 は str1 から p1 を進めていって\0の位置で抜けるので p1 は X+26 です。

ABCDEFGHIJKLMNOPQRSTUVWXYZ\0 ^ ^ str1(X) p1(X+26)

そこから逆向けに走査するので、p1 が文字列の先頭位置(str1)になったらループ終了です。
ですので、while(p1 > str1) は p1 が文字列の先頭よりも後ろの位置を示している間、となります。

投稿2016/05/29 06:36

toki_td

総合スコア2850

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

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

humizukihanya

2016/05/29 06:38

ものすごい分かりやすい説明ありがとうございます!納得することができました。 助かりました。
guest

0

元の文字列の先頭になるまで、という意味でしょう。逆順なのでこれでコピー終わりです。後は終端文字をつけます。

投稿2016/05/29 06:08

編集2016/05/29 06:12
HogeAnimalLover

総合スコア4830

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

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

humizukihanya

2016/05/29 07:08

ご回答ありがとうございます。それで、最後に’¥0’となっているのですね。 ソースコードの意味を理解することができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問