gpt4 book ai didi

c - strcpy() 总是丢失一些字符

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

我正在开发一个使用 UDP 协议(protocol)传输文件的项目,但是当我使用 strcpy() 将缓冲区复制到另一个字符串时,它总是丢失一些字符。

简单的想法是:我定义了一个结构:

struct frame{
int kind;//transmission(0) or retransmission(1)
int seq;
int ack;
char info[256];
};

然后我使用 fread 将文本文件的内容放入缓冲区:

char buffer[256] = {0};
fread(buffer, 256, 1, fp);//read file: 256 byte
struct frame currFrame;
currFrame.ack = 0;

bzero(currFrame.info, 256);
strcpy(currFrame.info, buffer); //store the content to transfer
printf("%s\n", buffer);
printf("%s\n", currFrame.info);

上面的代码位于 for 循环中,因为我多次读取文件。

当我使用printf()时,一半时间,结果是正确的。但半场时间,他们是不同的(就像脑子里漏掉了一些字符)。我该如何解决这个问题?

附上输出(上面是buffer,没错):

enter image description here

最佳答案

strcpy 函数仅适用于字符串。要复制任意数据,请使用memcpy。此外,%s 格式说明符仅适用于字符串。 fread 等函数读取任意二进制数据,并且不会尝试形成字符串。

此外,您调用 fread 的方式不会告诉您它实际读取了多少字节。除非您确定总是要读取正好 256 个字节,否则这并不明智。相反,将 fread 的第二个参数设置为 1,并使用第三个参数设置要读取的最大字节数。并且不要忽略返回值 - 这就是您知道它实际上能够读取多少字节的方式。

关于c - strcpy() 总是丢失一些字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47502877/

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