gpt4 book ai didi

c - 如何将字符串类型传递给结构体

转载 作者:行者123 更新时间:2023-11-30 19:13:17 25 4
gpt4 key购买 nike

我想将 C 语言中的字符串类型传递给我的 struct

当我使用这个从文件中获取时:

int fd = open("file.txt",O_RDONLY);
read(fd, &mst, sizeof(struct my_struct);

没问题。但我想从 char * 类型获取,是否存在某种方法使用 read 方法从 const char * 类型获取?

typedef struct{
char a[3];
char b[3];
}my_struct;

int main(){
const char *str = "qwerty";
my_struct mst;
read(str,&mst, sizeof(my_struct));
}

最佳答案

直接从文本文件读取到结构中......很奇怪。直接读取结构通常意味着您正在加载二进制数据结构,而不是文本。

它“有效”,因为你的结构设置得很奇怪。普通的结构体使用指针来存储字符串,就像这样。

typedef struct {
char *a;
char *b;
} normal_struct;

如果您想将文本放入该结构中,您可以将一个字符串(即 char *)分配给 thing->a事物->b.

/* Allocate memory for the string in the struct */
thing->a = malloc(...);

...use thing->a like any other char *...

因此,您将 read() 写入 thing->a,而不是写入 thing

char * 放入此结构中很容易。只需分配它...并确保释放 thing->a 中已有的内容。

if( thing->a != NULL )
free(thing->a);

thing->a = str;
<小时/>

您所做的是创建一个具有固定大小字符串的结构。

typedef struct {
char a[3];
char b[3];
} my_struct;

前三个字节是a,后三个字节是b

当您my_struct时,文本文件的前3个字节变成a,第二个变成b >。如果文件是 foobarbaz,则 mst->afoomst->bbar .

但是由于您只是在其中插入了字符,因此这些字符串上没有空填充。 C 不知道它们有多长。像 printf("%s\n", mst->a) 这样的东西很可能会产生 foobarald;kfjl2 因为它在结构体外部读取垃圾,直到它碰巧看到空。

出于这个原因以及许多其他原因,您最好使用 char * 构建结构。

关于c - 如何将字符串类型传递给结构体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35731392/

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