- 締切済み
c言語の文字列出力
プログラミング超初心者です サイトで文字列の出力について調べていたところ c言語は変数に文字列を代入することができないのでstrcpy関数を使い以下のようにするとあります char s[5]; strcpy(s, "ABCDE"); printf("%s\n", s); ところが他のサイトでは以下のように説明しています char s[5] = "ABCDE"; printf("%s\n", s); 明らかに後者の方が簡単で良いように見えるのですが違いはなんですか? あと、文字列の配列の指定?の[5]の部分なのですが 数字を記載しているところがほとんどですが省略しているところも有ります どんな文字列が入るかわからない場合もありますがここは省略しない方が良いのですか? よろしくお願いします
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- wormhole
- ベストアンサー率28% (1626/5665)
前者はstrcpy()の使い方の簡単なサンプルだからかと。 strcpy()の使い方のサンプルなのにstrcpy()が使われていなかったら意味ないでしょ? >数字を記載しているところがほとんどですが省略しているところも有ります どんな文字列が入るかわからない場合もありますがここは省略しない方が良いのですか? >char s[] = "ABCDE"; のように変数定義の段階でABCDEと'\0'で6バイトと明確で、そのバイト数で良い場合には省略できます(末尾の'\0'が不要な場合には省略できません)。 質問での前者のように必要なサイズが不明の場合には省略できません。
- kteds
- ベストアンサー率42% (1882/4440)
後者はコンパイル時に配列の要素を初期化している。 前者は実行時に代入している。 --- 配列の要素数を指定しない場合は自動的に要素数を決めてくれる。
お礼
どっちが効率が良いとかあるのですかね? 自動で決めてくれるのにわざわざ指定する意味がC言語初めて2日の人間には理解できてないんですよね このような小学生の国語の問題でも不完全でマルが貰えないような解答ではバッテンですね でもとにかくサンキューチェケラッチョですよ!
- catpow
- ベストアンサー率24% (620/2527)
まず、質問に書かれているC言語のソースは間違っています。 char s[5];ではなく、char s[6]; にすべきです。6以上で、char s[20];としてもいいですけどね。 このままだと、データ領域外への書き込みが発生します。 >>明らかに後者の方が簡単で良いように見えるのですが違いはなんですか? やっていることは同じと考えていいと思います。 ソースを簡単に書けるように、後者の書き方も認められるように文法を拡張したのだと思いますね。 >>あと、文字列の配列の指定?の[5]の部分なのですが 数字を記載しているところがほとんどですが省略しているところも有ります これも同じく、「できるだけ楽にソース書きたい」っていう要望に合わせて、省略もOKな文法に拡張したのだと思います。
お礼
数字を[5]にしたのは無知な私の間違いです\0が入るから6なのですよね このような間違いを起こさないためにも[]の方が良かったわけですね サンキューチェケラッチョです!
お礼
strcpy()の使い方の説明ではなく文字列の出力の説明でしたね あとscanf()などから取り込む場合は何文字入るか解らないけどそういう場合はどうするのですか? とにかくサンキューチェケラッチョです!
補足
よく読んだらcharの配列のところにも同じ説明がありました strcpy()の説明だったようですね Googleで検索して出てきたのをそのまま読んでたチェケラッチョですよ!