2

キャストに問題があるので、次のタイプをキャストする方法はありますか:

char *result; 

のタイプに

char *argv[100];

?

もしそうなら、どうすればいいですか、それとも安全な方法はありますか?

4

4 に答える 4

4

char * result文字列です

char * argv[100]文字列の配列です。

文字列を文字列の配列に変換することはできません。ただし、最初の配列値が結果である文字列の配列を作成できます。

argv[0] = result;
于 2013-09-17T20:40:19.367 に答える
2

char *resultへのポインタchar
char *argv[100]は の配列なchar *ので、実際にはchar **(ポインタへのポインタ)

次の点に注意してください。 int* arr[8];// int ポインターの配列。
int (*arr)[8];// 整数の配列へのポインタ

これは事実であり、これはおそらくあなたがやりたいことではありません。次の質問は次のとおりだと思います。何をしようとしていましたか? またはなぜですか?

于 2013-09-17T20:40:22.790 に答える
0

まず、簡単な説明:

  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 個のポインターの配列です (それぞれが文字列の先頭である場合とそうでない場合があります)。

于 2013-09-17T20:55:06.457 に答える
0

何が含まれており、変換後に何がresult含まれると予想されますか?argv

たとえば、 のようにresult区切り記号で区切られた文字列のリストを指し、"foo,bar,bletch,blurga,..各文字列を のように区切られた要素にしたいargv場合

argv[0] == "foo"
argv[1] == "bar"
argv[2] == "bletch"
argv[4] == "blurga"

その場合、単純なキャストではこれを達成できません。result個々のポインターを実際にスキャンして割り当てる必要がありますargv

于 2013-09-17T21:34:48.310 に答える