ここから本文です

C言語で、文字型配列を宣言した後で、文字列を代入する方法が分かりません。

アバター

ID非公開さん

2020/7/213:48:38

C言語で、文字型配列を宣言した後で、文字列を代入する方法が分かりません。

char string[20]="あいうえお";

のように、宣言と同時に文字列を代入することはできます。また、宣言の後でも、scanfを使って代入する方法なら分かります。
しかし、

char string[20];
string[20] = "あいうえお";

のように、はじめに配列を宣言した後に代入しようとするとコンパイルエラーになってしまいます。

1次元配列の場合は宣言と同時に代入すれば良いのですが、例えばstring[5][20] のような場合はそうもいかず困っています。


初心者です。どなたかよろしくお願いいたします。

閲覧数:
278
回答数:
5

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

pok********さん

2020/7/214:18:53

例えば

#include<stdio.h>
#include<string.h> //strcpy()に必要

int main(void){

char string[3][20];

//方法① sprintf( )
//配列に文字列を入力する
//使い方はprintf()と同じで、最初に配列名を書く

sprintf(string[0],"%s","あいうえお");


//方法② strcpy()を使う
//#include<string.h>が必要

//strcpy(文字列A,文字列B);
//文字列Aに文字列Bをコピーする

strcpy(string[1],"あいうえお");


//方法③ 配列を使って1文字ずつ入れる

char str[20]={"あいうえお"};

for(int i=0;i<20;i++)
string[2][i]=str[i];


//出力

for(i=0;i<3;i++)
printf("%s\n",string[i]);

return 0;

}

実行結果

あいうえお
あいうえお
あいうえお

アバター

質問した人からのコメント

2020/7/6 23:12:13

どなたも別の視点から答えて下さり、大変参考になりました。今回は最初に答えて下さったpokさんにBAを差し上げますが、皆さん本当にありがとうございました。

ベストアンサー以外の回答

1〜4件/4件中

並び替え:回答日時の
新しい順
|古い順

2020/7/301:59:33

補足です。

C言語には配列型があります。
https://ja.cppreference.com/w/c/language/type

単純代入演算子=で対象になるものはざっくりいうと構造体型、共用体型、算術型、ポインタ型のみである。
と言いたかったのでしょうが。

文字列を代入するには他にも
strcat 文字列を連結する
strncpy 文字列を一定量コピーする
などがあります。

nyosさん

編集あり2020/7/218:56:49

他の方々が全部説明していますので補足になります。

C言語は初期化の時だけ、文字列を直接指定して配列に入れておく事ができます。

char string[20]="あいうえお";
これは代入演算子を使っていますが意味合い的には初期化に当たります。
コンパイラがわざわざコンパイル時にこの変数の初期値として領域に展開する様にしてくれます。

string[20] = "あいうえお";
こちらは変数が実体化した後になるので代入になります。
この様な書き方は、配列に文字列を代入したいがために初心者がよく書いてしまう間違いです。ほぼ誰もが通る道です。

C言語の代入演算子は、型として存在するもののみ代入することができます。
char,short,int,float,double等とあとは自分で定義した構造体や共用体がそうです。詳細にはプラットフォームによりますが、もうちょっと有ります。

配列は、型の様に見えますが、実際は型では無く、型指定したものを指定数分スタックメモリ上に確保して、そのポインタを変数名として定義する方法です。

ですのでC言語には配列と言う型は無いのです。
だから配列に代入が出来ないのです。

あたかも配列の様に振る舞う書き方が出来る様になっているだけで、単なるメモリ上に確保された領域とそのポインタが配列の様にアクセス出来る様になっているだけなのです。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

プロフィール画像

カテゴリマスター

あみやさん

2020/7/215:22:16

答えは既に書かれていますが、

二次配列の場合であっても

char string[5][20] = {
"あいうえお", "かきくけこ",
"さしすせそ", "たちつてと",
"なにぬねの"}

とすると、宣言と共に初期化できます。

プロフィール画像

カテゴリマスター

Windcatさん

2020/7/214:43:07

>string[20] = "あいうえお";

↑のような記述はできません。
文字列処理関数を使って代入します。
文字列処理関数を使うには
#include<string.h>
でstring.hをインクルードしておきます。

char string[20];
strcpy(string,"あいうえお");

または、文字列を代入する先頭位置を指定して代入する

char string[20];
strcpy(&string[0],"あいうえお");

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる