gpt4 book ai didi

c - 在 C 结构体中存储字符串

转载 作者:行者123 更新时间:2023-11-30 14:36:27 26 4
gpt4 key购买 nike

作为计算机科学作业,我被要求制作一个使用下面这段代码的算法。问题是,Name 结构中的字符串被存储为指针,因此当我获得下一个输入时,所有字符串都是相同的,这会破坏我的完整代码的功能。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define DEFAULT_CAP 5
#define SUCCESS 1
#define FAILURE 0
#define MAX_LINES 100000

typedef struct Name
{
char *string;
} Name;

Name *initializeName(char *inputedName)
{
Name *name = calloc(1, sizeof(Name));
if (name != NULL)
{
name->string = inputedName;
}
return name;
}

void printName(Name *name){
printf("Name -> %s\n", name->string);
}

int main() {

Name **name;

for(int i=0; i< 3; i++) {
char string[100];
scanf("%s", string);
name[i] = initializeName(string);
for(int j = 0; j<=i;j++) {
printName(name[i]);
}
}


return 0;
}

这是一个测试代码,其中提到的功能已损坏。它扫描一个字符串并将其存储在名称中,并将名称放入名称数组中。

如何将Name->string存储为字符串?

最佳答案

分配结构名称后,您可以继续分配空间来存储字符串本身的副本:

if (name != NULL)
{
/* +1 for null terminator at end of string */
size_t string_length = strlen(inputedName) + 1;

name->string = calloc(string_length, 1);

如果成功,则可以将字符串复制到新分配的空间中(如果失败,则需要释放分配的struct Name):

    if (name->string != NULL)
{
memcpy(name->string, inputedName, string_length);
}
else
{
free(name);
name = NULL;
}
<小时/>

main() 中也有错误。 Name **name; 是一个指针,但它尚未指向任何地方,因此您无法访问 name[i]。您的 for() 循环仅访问 name[0]name[2],因此将定义更改为包含三个 的数组>Name * 指针将修复它:

Name *name[3];

关于c - 在 C 结构体中存储字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58055238/

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