0

我正在尝试在 C 程序中编写更高效的代码,并且我需要一些帮助以使我的指针和分配正确。我在下面展示了两种方法,每种方法都使用以下声明和 strncpy:

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 通常是首选?

4

1 回答 1

1

你离这里很远。1:是,2:否,3:否,4:是。我不会全部做,但这里有一些提示。

您需要空间来存储字符串和空间来存储指向字符串的指针(后者对于方法 A 不是绝对必要的)。第一个将有 type char*,第二个将有 type char**

对于方法 A,您正在正确分配字符串存储空间,但您需要为字符串指针正确分配存储空间(提示:您需要指针arraysize的实例char*)。然后它被初始化为彼此相差 100 个字符的指针。

对于方法 B,没有简单的方法来分配空间来存储字符串,因为您不知道需要多少空间。您可以遍历所有字符串一次以计算它们的长度,或者malloc每个字符串执行一个,或者使用固定大小的块并在用完时分配更多。

方法 B 使用与方法 A 相同的字符串存储指针数组。一旦知道字符串指针的去向,就需要将字符串指针分配到数组中。

于 2012-04-06T21:15:38.000 回答