gpt4 book ai didi

c - 如何使用字符串赋值结构?

转载 作者:行者123 更新时间:2023-11-30 20:57:04 25 4
gpt4 key购买 nike

代码:

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

struct super_block {
unsigned short s_ninodes;
unsigned short s_nzones;
};

#define NR_SUPER 8
struct super_block super_block[NR_SUPER];

int
main()
{
struct super_block * p;
struct super_block * s;
char b_data[] = "2020";

for(p = &super_block[0] ; p < &super_block[NR_SUPER] ; p++) {
p->s_ninodes= 0;
p->s_nzones = 0;
}

s = super_block;

*(s) = *((struct super_block *) b_data);
printf("%d\n%d\n", s->s_ninodes, s->s_nzones);
return 0;
}

问题是:我想要

s->s_ninodes =20 and s->s_nzones=20, how to solve it ?

为什么 "*(s) = *((struct super_block *) b_data);" 不行?

谢谢

最佳答案

数组 b_data长度为 5 个字节(“2020” => 4 个字符加上结尾 \0 )。假设您的结构已打包,并且 sizeof(short) == 2 ,你的struct superblock对象将接收字符串中字符的字节值。在这里,给定常见的 ASCII 值,您可能会得到(以十六进制方式以避免字节顺序讨论)s->s_ninodes == s->s_nzones == 0x6260 .

如果您想坚持使用这种模糊方法来影响结构中的数据,那么只需尝试使用 short b_data[] = {20,20}相反,并祈祷您的结构已打包...(或添加 __attribute__((packed)) 标记)。无论如何,在没有充分理由的情况下进行这种矫揉造作是一种非常糟糕的做法(通常,充分的理由是检索需要解析的数据流,并且在这种情况下,您最可能会在数据结构定义中找到 __attribute__((packed)) 的东西)。

编辑:我不知道为什么,但是在做这样的事情时,在我看来,使用 memcpy()而不是直接的做作使它更清晰(我猜更容易阅读和发现缓冲区溢出)。

关于c - 如何使用字符串赋值结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15966600/

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