文字列配列の操作に混乱しています。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 行で警告を返します。私が間違っていることは何か分かりますか?