キャストに問題があるので、次のタイプをキャストする方法はありますか:
char *result;
のタイプに
char *argv[100];
?
もしそうなら、どうすればいいですか、それとも安全な方法はありますか?
キャストに問題があるので、次のタイプをキャストする方法はありますか:
char *result;
のタイプに
char *argv[100];
?
もしそうなら、どうすればいいですか、それとも安全な方法はありますか?
char * result
文字列です
と
char * argv[100]
文字列の配列です。
文字列を文字列の配列に変換することはできません。ただし、最初の配列値が結果である文字列の配列を作成できます。
argv[0] = result;
char *result
へのポインタchar
char *argv[100]
は の配列なchar *
ので、実際にはchar **
(ポインタへのポインタ)
次の点に注意してください。
int* arr[8];
// int ポインターの配列。
int (*arr)[8];
// 整数の配列へのポインタ
これは事実であり、これはおそらくあなたがやりたいことではありません。次の質問は次のとおりだと思います。何をしようとしていましたか? またはなぜですか?
まず、簡単な説明:
char *result;
変数result
はポインターであり、設定すると単一の文字を指します。ただし、ご存じのように、単一の文字がヌル (\0) 文字で終わる文字列の先頭になる場合があります。
C では、優れたプログラマーはポインターresult
を使用して、文字列のインデックスを作成できます。
ただし、ポインターがヌル文字に到達するまで、文字列の長さはわかりません。
固定長の文字列 (この場合はコード) を定義することができます。
char s[100];
さあ、楽しみが始まります。s
カーニハンとリッチー (K&R) によると、0 で終わる文字列へのポインタです。
したがって、次のようにコーディングできます。
s[0] = 'a';
*s = 'a';
s[1] = 'b';
*(s+1) = 'b';
これらは同等のステートメントです。
他の投稿で述べたように、argv ステートメントに明示的な括弧を追加しましょう。
char *(argv[100]);
したがって、これは文字への 100 個のポインターの配列です (それぞれが文字列の先頭である場合とそうでない場合があります)。
何が含まれており、変換後に何がresult
含まれると予想されますか?argv
たとえば、 のようにresult
区切り記号で区切られた文字列のリストを指し、"foo,bar,bletch,blurga,..
各文字列を のように区切られた要素にしたいargv
場合
argv[0] == "foo"
argv[1] == "bar"
argv[2] == "bletch"
argv[4] == "blurga"
その場合、単純なキャストではこれを達成できません。result
個々のポインターを実際にスキャンして割り当てる必要がありますargv
。