質問: いつもお世話になっています。c言語初心者で勉強中です。課題で、文字列のn文字目の後ろに、標準入力から入力した単語を挿入時に文字列の長さが1023文字を超えても動作しつづけるプログラムを作成したいんです。いろいろ考えたんですが、流れがうまくつかめず、苦戦しています。nのアドレスを知って、配列の中身を1つずらそうとおもったんですが、p=&nでは変数の型が違くてアドレスを得られませんでした。どうやればnのアドレスを得られるのか教えて下さい。また流れがいまいちわからないので、流れもよろしければ教えてください。 実行したいこと ./a.out [Wakamatsu] 0 Atui [Atui][Wakamatsu] 11 young [Atui][Waka[young]matsu] 23 pine [Atui][Waka[young]matsu[pine]] 以下がコードです。```C言語 コード ``` #include #include #include #define BUFSIZE 1024 int main(){ char init[]="[Wakamatsu]"; /* 初期データ用文字列 */ char *str,*buf,*mou; int n; char input[BUFSIZE]; /* 入力用文字列バッファ */ /* その他の変数を宣言 */ int kazu,mozi; char *p; /* strの初期化を記述する*/ str=init; /* strlen,malloc,strcpyを使いstrにinitの内容のコピーを保持させる */ kazu=strlen(init);/*文字列をコピーするからinit[i]みたいに文字として表記しない。*/printf("kazu=%d\n",kazu); str=(char*)malloc(kazu*sizeof(char)); strcpy(str,init);/*文字列をコピーするからinit[i]みたいに文字として表記しない。*/ while (1) { printf( "%s\n", str ); if( scanf("%d %s", &n, input) != 2 ) break; /* * 処理の内容を記述する */ mozi=strlen(input); buf=(char*)malloc(kazu+2+mozi*sizeof(char)); mou=(char*)malloc(mozi+2*sizeof(char)); // mou[0]='['; // mou[mozi+2]=']'; strncpy(mou,input,mozi+2); mou[0]='['; mou[mozi+2]=']'; printf( "%s\n", mou); } ```
回答: どこで’p=&n’ってやってます?それと'char *p'と'int n'ではアドレスを渡すにしても型が違うので。 それと気が付いたのが’mou[mozi+2]=']'; ’はいいけど、最後に'\0'にしないと文字列の最後が分かりませんよ。