6

文字列の配列が必要です。文字列の長さはコンパイル時にわかっており、各文字列がこれだけのスペースを占めることが重要です。一方、文字列の数は実行時にのみわかります。このための構文は何ですか?

char* data[STRLENGTH]構文が正しくありません。char** dataほとんどは機能しますが、sizeof(data[0])間違っています-と等しくなるはずSTRLENGTHです。

4

3 に答える 3

10

@Danielは正しいですが、このコードはそれを読む人々を混乱させる可能性があります-それはあなたが通常行うことではありません。わかりやすくするために、次の2つの手順で行うことをお勧めします。

typedef char fixed_string[STRLENGTH];
fixed_string *data;
于 2012-05-21T20:37:48.203 に答える
7
char (*data)[LEN];                   // where LEN is known at compile time
...
data = malloc(sizeof *data * rows);  // where rows is determined at run time
...
strcpy(data[i], some_name);
...
printf("name = %s\n", data[i]);
...
free(data);

dataはポインタ型であり、配列型ではないことに注意してください(はの要素配列dataへのポインタです)。この呼び出しは、長さの配列を保持するのに十分なメモリを動的に割り当てます。それぞれがタイプになります。 LENcharmallocrowsLENdata[i]char [LEN]

于 2012-05-21T20:58:04.713 に答える
6
char* data[STRLENGTH]

STRLENTGHへのポインタの配列を宣言しcharます。STRLENGTH charsの配列へのポインタを宣言するには、次を使用します。

char (*data)[STRLENGTH]
于 2012-05-21T20:36:14.427 に答える