#include <iostream.h>
void main(){
char x[29]="abcde";
char* y="~";
for(char *p=x+1, i=0; i<15; i++,p+=2) {
*p=(char)(i+49); // x[奇数] に数字文字を入れる
strcat(p,y); // 数字文字の後ろにチルダを付ける
}
cout << x << endl << x[29] << endl << x[30];
}
↓出力結果
-------------------------------------
a1~2~3~4~5~6~7~8~9~:~;~<~=~>~?~
?
~
-------------------------------------
1回目に動作する strcat(p,y) の処理を教えてください。
strcat(p,y) の処理をされる前は、
x[0]='a' x[1]='b' x[2]='c' x[3]='d' x[4]='e' ...
となっていると思います。
1回目の strcat(p,y) で、x[1]='b' x[2]='~' x[3]='\0' x[4]='e' ...
となると思うんだけど、この考えは合っていますか?
No.3ベストアンサー
- 回答日時:
初回strcatまでの流れはこんな感じです。
char x[29]="abcde";
↓
x[0]='a' x[1]='b' x[2]='c' x[3]='d' x[4]='e' x[5]='\0'
*p=(char)(i+49);
↓
x[0]='a' x[1]='1' x[2]='c' x[3]='d' x[4]='e' x[5]='\0'
strcat(p,y);
↓
x[0]='a' x[1]='1' x[2]='c' x[3]='d' x[4]='e' x[5]='~' x[6]='\0'
No.2
- 回答日時:
for文の初期化でp=&x[1]になっています。
1回目の*p=(char)(i+49)は
*p = '1' ;
↑x[1]と等価
ですね。
よって、1回目のstrcat()は
"a1cde"と"~"の連結です。
結果として"a1cde~"となり、御希望の結果は得られません。
当然、ループ中にxは29個では足りなくなり(元々足りませんが)「不正アクセス」で落ちるでしょう。
また、main()はint型の値を返すことが言語規約上決まっているのでvoidと宣言するのは間違いです。
No.1
- 回答日時:
なんか物凄いプログラムですね。
> 1回目の strcat(p,y) で、x[1]='b' x[2]='~' x[3]='\0' x[4]='e' ...
> となると思うんだけど、この考えは合っていますか?
1回目は p が z+1 されていますから、
x[0]='a'
x[1]='1'←ここに "=(char)(i+49)" このコードが入る
x[2]='c'
x[3]='d'
x[4]='e'
x[5]='~'
x[6]=0
ですね。
strcat() は文字列の一番後ろに文字列を加える関数です。
なので strcat() を使わずに、
for(char *p=x+1, i=0; i<15; i++,p+=2) {
p[0]=(char)(i+49);
p[1]=(char)'~';
}
です(下記)。
x[0]='a'
x[1]='1'
x[2]='~'
x[3]='d'
x[4]='e'
x[5]=0
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
fgetsなどのときのstdinのバッ...
-
文字列から空白を取り除きたい...
-
間接操作のレベルとは
-
Linuxでフォルダ内全ファイル名...
-
テキストデータをそのままバイ...
-
構造体のアライメント調整
-
Win32APIでのエディットボック...
-
switch文で文字を比較すること...
-
pingの結果を取得する方法
-
バイトスワップをやりたい
-
charからLPTSTRへの変換方法
-
TCHAR文字列?の特定部分の数字...
-
【C言語】構造体内の領域解放(...
-
CStringをwchar_tに変換したい
-
strsetという関数
-
干支のプログラム
-
_TCHAR*での引数の読み込み
-
ネットワークにつながっている...
-
間接参照のレベルが異なっています
-
'const char *' 型は 'char *' ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
fgetsなどのときのstdinのバッ...
-
CStringをwchar_tに変換したい
-
charでの計算?
-
文字列から空白を取り除きたい...
-
charからLPTSTRへの変換方法
-
'const char *' 型は 'char *' ...
-
テキストデータをそのままバイ...
-
配列をnビットシフトする
-
半角カナ→16進
-
double型の値をchar配列に変換...
-
sprintfに同じ変数は使えるか
-
ファイル名である文字列からbas...
-
ネットワークにつながっている...
-
ftoa の作り方
-
間接操作のレベルとは
-
型変換
-
C言語です
-
C言語のfor文です。 繰り返しの...
-
Win32APIでのエディットボック...
-
【C言語】文字型と整数型の違い
おすすめ情報