gpt4 book ai didi

C程序: regular versus ragged character-string arrays

转载 作者:行者123 更新时间:2023-11-30 15:58:04 27 4
gpt4 key购买 nike

我正在尝试在 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 元素组成的(参差不齐的)数组来避免浪费存储空间,其中每个元素都是一个指向 char 的指针。

问题 1:我在方法 A 中正确分配内存(例如 malloc)吗?

问题 2:方法 B 的语法看起来正确吗?

问题 3:如何为方法 B 中的数组分配内存?

问题 4:我认为通常首选方法 B,这种说法正确吗?

最佳答案

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

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

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

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

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

关于C程序: regular versus ragged character-string arrays,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10049219/

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