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++;
}
このように組んでみたのですが、うまくいきませんでした。
これでは一度入力した文字列の内容を
保持する事ができないようです。
根本的にアルゴリズムが悪いのではないかとも考えていますが、どうするのが良いのかわかりません。
初心者なので至らない点、情報不足があればご指摘願います。
これではなぜ無理なのか、またどのようなアプローチが良いのかご教授よろしくお願いします。
No.1
- 回答日時:
>char *OutputStr[5];
>printf("%s",OutputString[i]);
未定義の変数にアクセスしようとしているため、コンパイルできません。「うまくいかない」とは、このことではないですよね。
さしあたり、質問者さんと回答しようとする側とが同じ土俵に立つために、
お手持ちのソースコードを、断片でなく「そっくりそのまま」見せていただけますか?
回答ありがとうございます。
OutputStringはこちらのミスでした、すいません。
複数の回答をいただいて解決できることができました。
もしまた質問する際には断片ではなく全部を載せるようにします。
No.2
- 回答日時:
OutputStr[InputCount]=InputStr;
は何をしていますか?
文字列をコピーするのはそれではだめですよね?
後はざっとしか見ていませんが、そこが気になりました。
回答ありがとうございます。
mallocの使い方等にも自信が無かったので、見落としていました。
こういった場合はstrcpy関数なのですね、勉強になりました。
No.3ベストアンサー
- 回答日時:
この行がおかしいです。
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);
}
とりあえず動くようにしました (とりあえずレベルです) 。
この程度の要求事項なら
無理してポインタを使わなくてもいいんじゃないかなーとも思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# str[j++]の意味 2 2022/08/30 16:20
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- C言語・C++・C# 【C言語】全角文字の配列を、全角のまま1文字ずつ出力する方法 4 2023/05/09 15:08
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
文字列中に含まれる文字の個数...
-
反転した数値を表示させるやり方
-
文の意味
-
C言語 配列 文字列
-
fgets関数を使用したときの文字...
-
c言語のプログラミングでキーボ...
-
Cで「大文字、小文字の判定」は...
-
2÷3などの余りについて
-
C言語で%を使わない余りの出し方
-
比較回数と交換回数表示について
-
信頼区間の1.96や1.65ってどこ...
-
nCmの関数
-
複数桁10進数の*桁目だけを抽出...
-
Notepad++の関数リスト表示の変...
-
C言語のfor文です。 繰り返しの...
-
break文でループを一気に抜ける...
-
正負を反転させて出力するプロ...
-
#define _CRT_SECURE_NO_WARNIN...
-
error C2143: 構文エラー : ';'...
-
プログラムでの数字につく”f”の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CStringのFindで文字列検索を行...
-
sscanfとscanfの違いがよくわか...
-
反転した数値を表示させるやり方
-
fgets関数を使用したときの文字...
-
C言語 空白の行(改行のみ)が...
-
charと%c , %s の関係について
-
C言語のステップ数をカウントす...
-
fgetsで拾われる改行文字を削除...
-
itoaわかりません
-
C言語で16進数文字列から16進数...
-
strstrを利用しない文字列検索...
-
文字列中に含まれる文字の個数...
-
Cで「大文字、小文字の判定」は...
-
1行の文字列を時間差で表示する...
-
エディットボックスに入力され...
-
[Java]文字列分割
-
文字列の途中に「0」がある場...
-
教えていただけませんか?C言語...
-
atoiでの文字列以外のエラー処...
-
fgetsでバッファ残留文字列を無...
おすすめ情報