在排版之后,无法以正确的方式访问结构的某些元素。
这里是我的代码:

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(“编号:%s”,dparse->编号);
例如:123描述
我怎么才能只知道号码?
(附言)。
struct shmData{
    char number[4];
    char description[1020];
};

)

最佳答案

听起来这个数字不是以nul结尾的。您有number字段,然后紧接着有description字段。printf()假设您正在给它一个以nul结尾的字符串,并且它将一直运行,直到它碰到终止的nul字符为止。在你的例子中,似乎没有一个nul终止number字段,所以printf()继续运行并得到description字段。
number中的所有四个字符都可以用于数字吗?
如果数字只有3位或更少,那么可以将一个终止nul直接放入number缓冲区。如果您可能需要从那里读取4位数字,则需要将这些数字复制到至少5个字符的临时缓冲区中,然后nul终止。

// 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终止,这是不幸的。所以我们应该在最后一个位置加上一个终止的nul字符,这样不管怎样,它都是nul终止的。请注意,有时strncpy()会为我们放置一个nul,但确保存在一个nul并不有害。

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

10-11 19:06