gpt4 book ai didi

c - strncpy 复制超过 n 个字符

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

我得到了一个程序的外壳,必须填写一些函数。

我有两个自动创建并传递给我必须定义的函数的结构。

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,如果这很明显,请原谅我,但我什至无法触及作业的核心,因为我的语言有问题。

最佳答案

printf(),带有 %s 说明符,假定您向它发送一个以零结尾的字符串。因此它读取内存中的字节,直到找到零(或 '\0')。

strncpy 不会将零附加到目标字符串,除非在到达 n 个字符之前在源字符串中遇到零(此时目标字符串的其余部分用零填充,这当然会导致它为零-终止)。

关于c - strncpy 复制超过 n 个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4210958/

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