gpt4 book ai didi

c - 函数指向 char 的指针是否需要在 C 中分配内存

转载 作者:行者123 更新时间:2023-12-04 04:33:15 25 4
gpt4 key购买 nike

使用以下数据结构在 c 中定义函数:

typedef struct {
int number;
char name[25];
} person;
person rep[100];
int key=0;

定义这个函数时内存分配有没有问题:
(我只是一个初学者:我不知道内存分配是什么意思)
void add_person(int num, char *name){
if (key<100){
rep[key].number = num;
strcpy(rep[key].name, name);
key++;
}
}

最佳答案

函数的指针与此完全不同。

你所拥有的是一个带有 char * 的函数( char 指针)。如果你调用这个函数,你会将"new"的内容传递给它 person结构。

person struct 包含一个(相当小的)数组,可以在其中保存名称,因此内存分配(这意味着保留一个内存区域供专用使用)在那里暗示。

但请注意:如果调用者传递超过 25 个字符的字符串,您认为会发生什么?没错,它会“销毁”它后面的内存区域的内容。

所以你要注意和使用strncpy(rep[key].name, name, sizeof rep[key].name) .作为strncpy()的创建者似乎已经睡着了(“如果源比 num 长,则不会在目标末尾隐式附加空字符”),您必须自己添加此空字符 - 表示 C 中字符串的结尾:

rep[key].name[sizeof rep[key].name - 1] = '\0'

如果字符串较短, strcpy()添加了自己的 '\0' ,如果没有,我们在这里剪掉它。

关于c - 函数指向 char 的指针是否需要在 C 中分配内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20212665/

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