gpt4 book ai didi

c - 在对其他数组进行类型转换后获取结构中的第一个字符数组

转载 作者:太空宇宙 更新时间:2023-11-04 03:58:21 26 4
gpt4 key购买 nike

在类型转换后以正确的方式访问结构的某些元素时遇到问题。这是我的代码:

void get_description(struct shmstruct *ptr/*, int number*/) {
char buff[MESGSIZE];
struct shmData *dparse;
snprintf(buff, MESGSIZE, "%s", &ptr->msgdata[0]);
dparse = (struct shmData *) buff;
printf("Number: %s", dparse->number);
printf("Description: %s", dparse->description);
}

现在的问题是,我得到了号码,比如 123,还有第一个中的描述line ->
printf("Number: %s", dparse->number);
喜欢:123 说明

如何只获取号码?

(附言

struct shmData{
char number[4];
char description[1020];
};

)

最佳答案

听起来这个数字不是以 null 结尾的。您有 number 字段,紧接着您有 description 字段。 printf() 假设您给它一个以 nul 结尾的字符串,它会一直运行直到遇到终止的 nul 字符。在您的情况下,看起来没有 nul 终止 number 字段,所以 printf() 继续前进并获取 description还有。

number 中的所有四个字符都可以用作数字吗?

如果数字只有 3 位或更少,那么您可以将终止 nul 直接放入 number 缓冲区。如果您可能需要从那里读取 4 位数字,则需要将这些数字复制到至少 5 个字符的临时缓冲区中,然后以空字符终止。

// max 3 digits:
dparse->number[3] = '\0'; // ensure nul-termination of number

// max 4 digits:
#define DPARSE_NUMBER 4 /* size of number field in dparse */
char temp[DPARSE_NUMBER + 1];
strncpy(temp, dparse->number, sizeof(temp));
temp[sizeof(temp) - 1] = '\0'; // strncpy() does not guarantee to nul-terminate, so we must do this

strncpy() 不保证 nul-terminate,这是不幸的。所以我们应该总是在最后一个位置放置一个终止的 nul 字符,这样无论如何,它都是以 nul 终止的。请注意,有时 strncpy() 会为我们放置一个 nul,但确保它在那里没有坏处。

关于c - 在对其他数组进行类型转换后获取结构中的第一个字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14289235/

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