gpt4 book ai didi

c - 我应该使用什么 : strcpy or pointers?

转载 作者:太空宇宙 更新时间:2023-11-04 07:44:56 25 4
gpt4 key购买 nike

typedef struct node{
char *name;
//etc...
}N

如果我有 char *string 从 stdin 得到并且我想把它传递给 N,我可以很容易地做 N->name=string,或者使用 strcpy 会更好?哪个更正确?哪个更有效率?为什么?

最佳答案

您想使用缓冲区从标准输入读取您的输入。但是,如果您不进行复制,您的字符串将在下一次读取迭代中丢失。如果您要分配内存,并且不知道接收到的字符串的大小,则应使用类似 strdup 的函数。而不是 strcpy。

node->name = strdup(string_to_copy);
if (node->name == NULL)
printf("My allocation has failed!\n");

之后必须释放分配的内存。如果分配失败,您将收到一条消息(您应该始终检查内存分配是否成功)。

如果您不想分配内存,并且您知道输入的大小永远不会高于 100,那么您可以这样处理:

typedef struct node{
char name[100];
//etc...
}N

在这种情况下,您可以使用以下内容。请注意,strcpy 是一个危险的函数,应格外小心地使用:

strncpy(node->name, buffer, 100);
strcpy(node->name, buffer);

编辑:

这里有一个正确释放内存的方法:

if (node->name != NULL)
{
free(node->name);
node->name = NULL;
}

这种构造将释放您的内存并有助于防止双重释放。

关于c - 我应该使用什么 : strcpy or pointers?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57875287/

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