いつもお世話になっています。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 <stdio.h> #include <string.h> #include <stdlib.h> #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); }
回答3件
あなたの回答
tips
プレビュー