gpt4 book ai didi

C 程序 : newbie confusion on working with character string arrays

转载 作者:太空宇宙 更新时间:2023-11-04 06:06:14 24 4
gpt4 key购买 nike

我对使用字符串数组感到困惑。我正在尝试在 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]);

编译器在 for 循环内的两行返回警告:warning: assignment makes integer from pointer without a cast。知道我做错了什么吗?

最佳答案

由于您希望 array_person_namearray_param 中的每一项都是指向 person_name/"bt"的指针,因此您需要一个 字符 **:

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;

关于C 程序 : newbie confusion on working with character string arrays,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10055946/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com