この前コードを記載していたら、
ちよっと困ったので、教えて下さい。
以下にとりあえずコードを大まかに記載します。
#include <studio.h> int main(int argc, char *argv[]){ char get; //ここに1文字格納したい。 //何かしらの処理をしてargv[1]を代入 return 0; }
•前提条件
argv[1]には1文字格納されてる。
•実施したこと
strcpy(get, argv[1]);
get = argv[1][0];
ということをしました。
方法として、自分的にあまり納得できていません。
1つ目、strcpyに関しては、使い方的に良いのか?
2つ目、argvを二次元配列みたいに扱って良いのか?
という部分です。
ここで何か他にしっくりくる方法が他にないのか?ということで質問しました。
以上です。よろしくお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答5件
0
argv[1]には1文字格納されてる。
とは? strcpy()は、1文字なら終端'\0'を入れて2文字コピーするので、get(1文字)には入りません。
・・・補足strcpy(get, argv[1]);は、strcpy(&get, argv[1]);の間違い?
get = argv[1][0];あるいは、get = *argv[1];が正解のように思います。
投稿2020/03/04 06:43
編集2020/03/04 06:55総合スコア6851
0
ベストアンサー
strcpy(get, argv[1]);
は strcpy(&get, argv[1]);
の間違いですね。
非配列のオブジェクトは大きさ 1 の配列と同じレイアウトを持つので、長さ 1 の配列に対してコピーするのと同じように strcpy
を使えなくはないです。 コピー元の配列がコピー先の配列よりも大きいときに未定義の動作となるので前提条件が絶対確実であることは確認しておく必要がありますが……。
ポインタと配列の関係が非常に分かり難いのですが、配列は一部の例外を除いてその配列の先頭要素を指すポインタに型変換されるというルールがあり、それは二次元配列にアクセスするときにも適用されるルールです。
たとえば
c
1char foo[100][10];
と宣言された foo
があるとき、 foo[10][5]
としてアクセスしようとするとまず foo[10]
を評価して char [10]
型の値が得られるのですが暗黙の型変換よって char*
になってからそれに対して [5]
を適用するという順序が取られます。
一方で、ポインタが入ってる配列の bar
をこのように宣言したとします。
c
1char *bar[100];
このとき bar[10]
を評価した結果の型は char*
です。 二次元配列で暗黙の型変換が適用された場合と同じになります。
なので、ポインタが入った一次元配列は見かけ上は二次元配列と同じ文法で扱えるのです。
投稿2020/03/04 06:30
総合スコア5437
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/04 07:02
2020/03/04 08:59
2020/03/04 09:16
2020/03/04 10:09
0
strcpy(get, argv[1]);
が誤りであることについては、既に解説されている通りです。
ただ、変数名の get は標準関数名とバッティングするのでお勧めできません。
変数名の命名も大事ですよ。
投稿2020/03/04 07:09
総合スコア1095
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/04 07:37
2020/03/04 07:48
2020/03/04 22:43
0
2つ目、argvを二次元配列みたいに扱って良いのか?
という部分です。
特に問題ありません。C言語の文字列はcharの配列です。
投稿2020/03/04 06:02
総合スコア145121
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/04 06:37
2020/03/04 07:37
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/04 06:57
2020/03/04 07:49
2020/03/04 09:03