![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
配列str1に"Hello"、str2に"World!"を代入し、strcat関数を使わずに文字列を連結させ、出力するプログラムなのですが、
#include <stdio.h>
#include <string.h>
int main(void)
{
char str1[100],str2[100];
int i=0,j=0;
printf("str1>");
scanf("%s",str1);
j=strlen(str1);
printf("str2>");
scanf("%s",str2);
while(str2[i] != '\0'){
str1[i+j]=str2[i];
i++;
}
printf("%s\n",str1);
return 0;
}
ここの意味を教えていただけないでしょうか。
while(str2[i] != '\0'){
str1[i+j]=str2[i];
i++;
お願いします
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
>このプログラムがちゃんと動くのは、
>char str1[100] で 100文字分 '¥0' で初期化されるからです。
ちゃんと動かないにー票。自動変数配列の初期化は
初期化値式を書かないと
されないはず。
char str1[100]={0};
勿論、初期化に頼らず、null文字まできちんとコピーする
べきだと思います。
No.3
- 回答日時:
str1 文字型配列に格納されている文字の最後 ('¥0' の位置 - j) から str2 に格納されているをコピーする。
ただ、str2 側に格納されている'¥0' もコピーすべきでしょうね。
このプログラムがちゃんと動くのは、char str1[100] で 100文字分 '¥0' で初期化されるからです。
私なら while 文は
do {
str1[i+j]=str2[i];
} while(str2[i++] != '\0');
って書くかな。
No.2
- 回答日時:
意味としては「strcat関数を使わずに文字列を連結」に当たる部分ですね。
この部分を strcat を使えば、
strcat (str1, str2);
の 1行で終わってしまいます。
文字列は '\0' (NULL文字)で終わる文字コードの集合です。
この場合 str1 には 'Hello\0' (説明上 \0 を記述しています) str2 には 'World!\0' が代入されているはずなので、
j=strlen(str1);
で、str1 の(\0までの)文字数を調べ、
j の値は str1 の \0 の位置を示していることになるので、
while(str2[i] != '\0'){
str1[i+j]=str2[i];
i++;
}
は、str2 の\0が見つかるまで、str1 と str2 の配列位置を1文字ずつずらして str2 の i の位置から str1 の j + i の位置へ文字をコピーしています。
要するに、str1 の末尾の位置から str2 をコピー(連結)することですね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- その他(自然科学) 信頼度がR1、R2の機器を並列に接続した場合、システム全体の信頼度はどれか。答え1-(R1)(1- 2 2023/01/15 21:45
- Visual Basic(VBA) VBAで時間(00:00形式)を積算(足し算)したい 1 2022/11/15 17:04
- 電車・路線・地下鉄 初台→新宿3→代官山(7.6km)IC528円 笹塚→新宿3→中目黒(10.2Km)IC433円なぜ 5 2022/11/24 09:26
- Visual Basic(VBA) VBAで最新のデータを別シートに転記する方法をお教えください。 3 2022/04/07 19:20
- FTTH・光回線 ビッグローブ光とルーターの相性 2 2023/03/18 19:44
- 放射線治療・リハビリテーション リハビリ系のお仕事についてです。 将来、リハビリ系のお仕事につきたいと思っているのですが PT、OT 1 2022/05/21 20:31
- Visual Basic(VBA) countifsについての質問 3 2023/03/08 13:45
- その他(音楽・ダンス・舞台芸能) 高谷史郎の作品ST/LLに相当する洗練されたパフォーマンスを見せるアーティストは他にどんな方がいます 1 2023/02/18 21:31
- Visual Basic(VBA) ワークシートチェンジで曜日を表示する方法 1 2023/03/04 21:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CStringのFindで文字列検索を行...
-
charと%c , %s の関係について
-
C言語、単語ごとに改行したい
-
単語数のカウントについて
-
fgets関数を使用したときの文字...
-
教えていただけませんか?C言語...
-
fgetsでバッファ残留文字列を無...
-
C言語 文字列の操作
-
sscanfとscanfの違いがよくわか...
-
CStringについて
-
strstrを利用しない文字列検索...
-
C言語です
-
C言語 空白の行(改行のみ)が...
-
ブランクのチェック
-
Cで「大文字、小文字の判定」は...
-
教えて下さい 文字数最大制限2...
-
C言語の勉強しています。すみま...
-
C言語で可変長から固定長に変換...
-
2÷3などの余りについて
-
マイナスからプラスへ転じた時...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CStringのFindで文字列検索を行...
-
sscanfとscanfの違いがよくわか...
-
charと%c , %s の関係について
-
fgets関数を使用したときの文字...
-
反転した数値を表示させるやり方
-
fgetsで拾われる改行文字を削除...
-
C言語 空白の行(改行のみ)が...
-
itoaわかりません
-
Cで「大文字、小文字の判定」は...
-
文字列中に含まれる文字の個数...
-
C言語で16進数文字列から16進数...
-
strstrを利用しない文字列検索...
-
小文字のみを数える方法
-
C言語のステップ数をカウントす...
-
C言語でパスワード作成ツール
-
単語数のカウントについて
-
str[j++]の意味
-
fgetsでバッファ残留文字列を無...
-
教えていただけませんか?C言語...
-
エディットボックスに入力され...
おすすめ情報