【发布时间】:2010-11-18 01:57:29
【问题描述】:
我得到了一个程序的外壳,必须填写一些函数。
我有两个自动创建并传递给我必须定义的函数的结构。
typedef struct {
char data[20];
} msg;
typedef struct {
int seqnum;
int acknum;
int checksum;
char payload[20];
} pkt;
假设我必须定义这个函数 foo 并这样创建它:
void foo(msg message) {
printf("%s\n", message.data);
}
当调用该函数时,它会打印出ddddddddddddddddddddôÑ@<úHn½*Ìå«*¤ú¤F«*。除非我错了,它不应该只能容纳20个字符吗?我实际上并没有创建msg。
如果我将msg.data 复制到pkt.payload,那就更奇怪了。
void foo(msg message) {
pkt packet;
strncpy(packet.payload, message.data, sizeof(packet.payload));
printf("%s\n", message.data);
printf("%s\n", packet.payload);
}
message.data 的打印结果与之前相同,但 packet.payload 的打印结果为 eeeeeeeeeeeeeeeeeeee<úeeeeeeeeeeeeeeeeeeee²+!@<úHn½*Ìå«*¤ú¤F«*。为什么超过20个字符?
这是我第一次使用 C,如果这很明显,请原谅我,但我什至无法进入作业的核心,因为我在语言方面遇到了问题。
【问题讨论】:
-
如果您希望
%.20s处理可能不是以 null 结尾的 20 字节字段,请在您的printf格式字符串中使用它。