我想在C程序中编写更高效的代码,并且我需要一些帮助才能使指针和赋值正确。我展示下面两种方法中,每个使用下面的声明和函数strncpy:C程序:定期与不规则字符串数组
int kk, arraysize;
char person_name[100] = "";
char * array_person_name, * array_param;
...
strncpy(person_name, "John Smith", 100);
arraysize = <this value is downloaded from database>;
...
方法A(矩形阵列):
array_person_name = malloc(sizeof(char) * arraysize *100);
array_param = malloc(sizeof(char) * arraysize * 2);
for (kk = 0; kk < arraysize; kk++) {
strncpy(array_person_name[kk], person_name, 100);
strncpy(array_param[kk], "bt", 2);
}
方法B(粗糙的阵列):
for (kk = 0; kk < arraysize; kk++) {
array_person_name[kk] = &person_name;
array_param[kk] = "bt";
}
请注意,我试图创建的数组将相同的值放入数组的每个元素中。方法A是arraysize
元素的一个(矩形)数组,每个元素本身是一个由100个字符组成的数组。方法B通过创建一个arraysize
元素(不齐整的)数组来尝试不浪费存储空间,其中每个元素都是一个指向字符的指针。
问题1:我在方法A中正确分配内存(例如malloc)吗?
问题2:方法B的语法看起来是否正确?
问题3:如何为方法B中的数组分配内存?
问题4:我确定方法B通常是首选吗?
注意:您对'strncpy()'的使用是错误的(但是文字示例没问题)。为了安全地使用'strncpy()',你应该复制1小于目标数组的大小,并用'\ 0'填充最后一个元素。否则就会冒着产生不是字符串的字符数组的风险。 – pmg 2012-04-06 21:07:25
您的方法A代码没有正确使用您的存储,因为您的变量类型错误,它们需要例如'char(* array_person_name)[100];'和'char(* array_param)[2];'。 – Neil 2012-04-06 22:51:17