0

我对使用字符串数组感到困惑。我正在尝试在 for 循环中填充 2 个数组。在每个数组中,所有元素都是相同的。

为了节省内存,array_person_name我尝试简单地将指针复制到由person_name. 因为array_param,它存储指针的字符串总是 2 个字符长(例如“bt”)加上空终止字符,在这里我还尝试通过将指向“bt”的指针存储在 中来节省内存array_param

由于数组元素的数量arraysize, 是在程序运行时从数据库中下载的,因此我使用 malloc 来分配内存。由于我的操作系统是 64 位(Linux x86-64),我为每个arraysize指针分配 8 个字节。虽然没有显示,但我在程序结束时释放了这两个数组。

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 循环内的两行。知道我做错了什么吗?

4

3 回答 3

3

由于您希望每个项目都array_person_name成为array_param指向person_name/"bt" 的指针,因此您需要char **

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

你不应该假设 8 个字节,因为它是 64 位的。您应该将该部分留给 C 并使用sizeof()运算符。

于 2012-04-07T16:07:35.263 回答