XP環境でVisual C++2008を使ってC言語の
プログラミングをしています。
キーボードから複数回読み込み、長い文字列を作るというものです。
例)
>>文字列を入力
>>abc
>>今まで入力された文字列を表示
>>gsfgsdfgjfsdabc
配列、ポインタ、メモリの確保を行う事がヒントとして与えられています。
これを実現するために以下のようなプログラムを組んでみました。
int InputCount=0;
char InputStr[10];
char *OutputStr[5];
int i=0;
while(InputCount<5){
printf("文字列を入力してください\n");
scanf("%s",InputStr);
OutputStr[InputCount]=(char*)malloc(strlen(InputStr)+1);
OutputStr[InputCount]=InputStr;
printf("今までに入力された文字を表示します\n");
for(i=0;i<=InputCount;i++){
printf("%s",OutputString[i]);
}
printf("\n");
InputCount++;
}
このように組んでみたのですが、うまくいきませんでした。
これでは一度入力した文字列の内容を
保持する事ができないようです。
根本的にアルゴリズムが悪いのではないかとも考えていますが、どうするのが良いのかわかりません。
初心者なので至らない点、情報不足があればご指摘願います。
これではなぜ無理なのか、またどのようなアプローチが良いのかご教授よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

この行がおかしいです。


OutputStr[InputCount] = (char*)malloc(strlen(InputStr) + 1);
OutputStr[InputCount] = InputStr; ← これではダメ。strcpy関数を使う

printf("%s", OutputString[i]); ← 未定義の変数が出てくる (OutputStr[i]の間違い?)

#include <stdlib.h>
#include <string.h>

int main(void)
{
int InputCount = 0;
char InputStr[32];
char *OutputStr[5];
int i;

while (InputCount < 5) {
printf("文字列を入力してください\n");
scanf("%s", InputStr);
OutputStr[InputCount] = (char*)malloc(strlen(InputStr) + 1);
strcpy(OutputStr[InputCount], InputStr);
InputCount++;
}

printf("今までに入力された文字を表示します\n");
for (i = 0; i <= InputCount; i++) {
printf("%s", OutputStr[i]);
}
putchar('\n');

return (0);
}

とりあえず動くようにしました (とりあえずレベルです) 。
この程度の要求事項なら
無理してポインタを使わなくてもいいんじゃないかなーとも思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
無事解決できました。
strcpy関数の存在を知り、勉強になりました。

お礼日時:2009/05/23 21:48

#include <stdio.h> が抜けました。



あと、メモリ領域の解放 (free関数) が抜けてます。
それは課題ということで…^^;
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
断片的なプログラムを載せてしまいすいません。
全てを載せるように気をつけます。

お礼日時:2009/05/23 21:49

OutputStr[InputCount]=InputStr;


は何をしていますか?
文字列をコピーするのはそれではだめですよね?
後はざっとしか見ていませんが、そこが気になりました。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
mallocの使い方等にも自信が無かったので、見落としていました。
こういった場合はstrcpy関数なのですね、勉強になりました。

お礼日時:2009/05/23 21:42

>char *OutputStr[5];


>printf("%s",OutputString[i]);

未定義の変数にアクセスしようとしているため、コンパイルできません。「うまくいかない」とは、このことではないですよね。

さしあたり、質問者さんと回答しようとする側とが同じ土俵に立つために、
お手持ちのソースコードを、断片でなく「そっくりそのまま」見せていただけますか?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
OutputStringはこちらのミスでした、すいません。
複数の回答をいただいて解決できることができました。
もしまた質問する際には断片ではなく全部を載せるようにします。

お礼日時:2009/05/23 21:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング

おすすめ情報