2次元文字配列変数への値の代入法

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Ito

2次元文字配列変数への値の代入法

#1

投稿記事 by Ito » 18年前

 文字列変数への文字定数の代入の方法についてどなたかお教え下さい.

 s[5][10]を宣言し,ある条件を満たす場合にはsの各行に"Aです",そうで
ない場合に"Bです"という文字列を代入する処理を考えます.このような
処理について記載している参考書が全く見当たりません.試しに

char s[5][10]; /* 10文字入る文字列変数を5個宣言 */
for(i=0;i<10;i++) {
 if (...) {
s[0]="Aです\0";
}
}

としたところ,当たり前のようにエラーが返って来ました.i行目のトップ
から文字"列"を代入する方法を教えて下さい.

バグ

Re:2次元文字配列変数への値の代入法

#2

投稿記事 by バグ » 18年前

strcpy関数や、sprintf関数を使うと分かり易いと思いますよ(^-^)

<使用例>
strcpy(s, "Aです\0");

sprintf(s, "Aです");

結果は同じです。sprintfの場合は文字列の終端に自動で\0を追加してくれますし、数値の変換なんかもprintf関数のような使い方が出来るので、より分かり易いかもしれません。

それから、for(i = 0; i < 10; i++)となっていますが、[0]~[5]までしか領域が用意されていないので、これは危険です。for(i = 0;i < 5; i++)に修正した方が良いですよ。

box

Re:2次元文字配列変数への値の代入法

#3

投稿記事 by box » 18年前

> strcpy(s, "Aです\0");

strcpy()は、コピー先の領域が十分な大きさを持っていれば、
コピー元の文字列終端を含めてコピーします。
strcpy(s, "Aです");
で十分です。

> sprintf(s, "Aです");

sprintf()は、printf()の引数の先頭に格納先の変数を
付け加えた形式です。
sprintf(s, "%s", "Aです");
のように、書式文字列が必要です。
書式文字列を書かないでいると、
sprintf(s, "A%sです");
のようなケース(出力対象文字列の内容に、書式文字列に相当する内容を含む)で
思った結果を得ません。

閉鎖

“C言語何でも質問掲示板” へ戻る