標準入力から複数文字列を入力して、それを配列に代入したいです。
しかし以下のコードではコンパイルエラーとなってしまいます。
どうすれば実現できますか?
C
1#include <stdio.h> 2 3int main() 4{ 5 char input[]; 6 7 for (int i = 0; i < 3; i++) { 8 scanf("%s", input[i]); 9 } 10 11 return 0; 12} 13
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
コンパイルエラーの原因は
char input[];
ここで input のサイズを決めていないことです。
「いつ」「何文字」入力されるかわからない状況に対処するためのコードとしては、
どんどん文字が入力されたら、input をどんどん増やしていくのがいいのかなと考えています。
int main(int argc, char* argv[]) { int current_size = 4; char* input = malloc(current_size); int current_index = 0; while (1) { scanf("%c", &input[current_index++]); if (current_index >= current_size) { int new_size = current_size; new_size += 4; char* new_input = malloc(new_size); for (int i = 0; i < current_size; i++) { new_input[i] = input[i]; } free(input); input = new_input; current_size = new_size; } } free(input); return 0; }
どうでしょうか?
#追記
コードミスがありました。すみません。修正しました。
scanf("%s", input[current_index++]); → scanf("%c", &input[current_index++]);
投稿2017/07/25 01:57
編集2017/07/25 02:33総合スコア88
0
ベストアンサー
3点間違いがあります。
-
バッファの領域が確保されていない。
-
複数入力値を保持するのであれば、バッファは二次元配列である必要がある。
-
scanfに渡すのはアドレスである。
解説
1と2についてまとめて説明しますと、そもそも配列の要素数が定義されていないので、何が起こるかわかりません。
きちんと想定されるサイズの領域を確保してください。
また複数入力値を保持する必要があるので、二次元配列にすると良いでしょう。
例
char input[3][128];
3について。
scanfに渡すのは値ではなくアドレスです。
格納して欲しい領域(変数)のアドレスを渡します。
なのでここでは、上記1と2の回答を踏まえこう書くと良いでしょう。
scanf("%s", &input[i][0]);
もしくはこれでも良いです。
scanf("%s", &input[i]);
投稿2017/07/25 01:28
総合スコア16998
0
c:
1#include <stdio.h> 2 3int main() 4{ 5 char input[256]; //適当な文字数 6 scanf("%s", input); 7 8 return 0; 9}
%sは配列名を指定します。これで文字列の入力ができます。
が、上記のように、適当な文字数をコンパイル時に指定しなければなりません。
そうでない場合、メモリ上に領域が割り当てられないまま、値が代入されますので思わぬ誤作動を引き起こすことになります。
この場合、アルファベットで256文字以下しか入力できないことに注意してください。
また、日本語など2byte文字はさらに減ります。
投稿2017/07/25 01:27
編集2017/07/25 01:30総合スコア23
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/07/25 01:36 編集
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/07/25 02:00