0

文字列配列の操作に混乱しています。for ループで 2 つの配列を埋めようとしています。各配列内では、すべての要素が同じです。

メモリを節約するためarray_person_nameに、person_name. の場合array_param、ポインターを格納する文字列は常に 2 文字 (例: "bt") にヌル終了文字を加えた長さです。ここでは、"bt" へのポインターを に格納することでメモリを節約しようとしていますarray_param

プログラムの実行時にデータベースから配列要素の数arraysizeがダウンロードされるため、malloc を使用してメモリを割り当てます。私の OS は 64 ビット (Linux x86-64) であるため、各arraysizeポインターに 8 バイトを割り当てます。示されていませんが、プログラムの最後でこれら 2 つの配列を解放します。

int kk, arraysize;
char person_name[101] = ""; 
char * array_person_name;
char * array_param; 
...
strncpy(person_name, "John Smith", 100);
arraysize = <this value is downloaded from database>;
...
array_person_name = malloc( 8 * arraysize ); /* 8 is for 64b OS */
array_param = malloc( 8 * arraysize ); 
for (kk = 0; kk < arraysize; kk++) {
    array_person_name[kk] = &person_name;
    array_param[kk] = &"bt";
}

/* test results by printing to screen */
printf("Here is array_person_name[0]: %s\n", array_person_name[0]);
printf("here is array_param[0]: %s\n", array_param[0]);

コンパイラはwarning: assignment makes integer from pointer without a cast、for ループ内の 2 行で警告を返します。私が間違っていることは何か分かりますか?

4

3 に答える 3

3

各アイテムarray_person_nameを/"bt"array_paramへのポインターにしたいので、次のものが必要です。person_namechar **

char **array_person_name;

array_person_name = malloc(arraysize * sizeof(*array_person_name));

for (int i=0; i<arraysize; i++)
    array_person_name[i] = person_name;
于 2012-04-07T16:04:31.427 に答える
1

配列 person_name へのポインタを array_person_name[kk] で定義された文字に割り当てています。おそらく、array_person_name を char** 型として定義するつもりでした。

于 2012-04-07T16:04:23.270 に答える
1

64ビットなので、8バイトを想定すべきではありません。その部分は C に任せて、sizeof()演算子を使用する必要があります。

于 2012-04-07T16:07:35.263 に答える