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_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
您将指向数组person_name的指针指定给array_person_name [kk]定义的字符。 你可能想要做的是将array_person_name定义为char **类型。
你不应该假设8个字节,因为它是64位。 您应该将该部分保留为C并使用sizeof()
运算符。