C程序:新手在处理字符串数组时的困惑

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

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

由于在程序运行时从数据库下载了数组元素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 = ; ... 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循环内的两行上进行强制转换。 知道我做错了什么吗?

由于您希望array_person_namearray_param每个项都是指向person_name /“bt”的指针,因此您需要一个char **

 char **array_person_name; array_person_name = malloc(arraysize * sizeof(*array_person_name)); for (int i=0; i 

您将指向数组person_name的指针指定给array_person_name [kk]定义的字符。 你可能想要做的是将array_person_name定义为char **类型。

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