gpt4 book ai didi

c - read() 从文件中返回额外的字符

转载 作者:行者123 更新时间:2023-11-30 16:23:56 25 4
gpt4 key购买 nike

我正在尝试从文件中读取文本进行打印..在尝试时,如果我给出字符缓冲区大小,它会返回一些额外的字符..

#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <fcntl.h>

int main(){

int fd = open("text.txt",O_RDONLY);

char cbuffer[100];
int a =0;
if(fd>0){
puts("File open");
ssize_t len = read(fd,cbuffer,sizeof(cbuffer));
a =printf("%s",&cbuffer);
printf("\n return data count %d",a);
}

return 0;

}

如果代替

ssize_t len = read(fd,cbuffer,sizeof(cbuffer));

ssize_t len = read(fd,cbuffer,10);

准确返回 10 个字符。谁能解释一下为什么会发生这种情况?

最佳答案

发生这种情况是因为 read() 不会以 null 终止输出。在将目标缓冲区用作字符串之前,您需要将其空终止。

基本上,将非 null 终止的 char 数组传递给 printf() 作为 %s 的参数会创建 undefined behavior因为可能存在越界内存访问。

实现此目的的一种方法是0-初始化目标。这样,在 read() 读取并存储有效值后,它将被视为以 null 终止。类似的东西

  char cbuffer[100] = {0};

可以提供帮助。

也就是说,改变

 printf("%s",&cbuffer);

printf("%s",cbuffer);

as %s 需要一个指向以 null 结尾的 char 数组的指针。当您将数组名称传递给函数时,它会衰减为指向第一个元素的指针,因此应该没问题。

关于c - read() 从文件中返回额外的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53789161/

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