gpt4 book ai didi

c - 如何使用缓冲区和 lseek 更改文件中的某些字母

转载 作者:太空宇宙 更新时间:2023-11-04 07:02:34 24 4
gpt4 key购买 nike

我在使用 lseek 和缓冲区进行分配时遇到了一些问题。目标是读取文件并将每个字母“a”更改为“?”。我正在运行一些小程序来了解函数和缓冲区的工作原理,但我遇到了一些麻烦……想象一下,我的文件“teste”中只有“abcabcabc”。如果我这样做:

int fd = open("teste", O_RDWR);
char buf[1];
int fptr = lseek(fd, 0, SEEK_SET);
fflush(stdout);
read(fd, buf, 1);
printf("%s\n", buf);

我在我的控制台上输入“a”,所以第一个字母读起来很好,因为我把指针指向了开头。但是,如果我在 printf 之前执行 if 条件,将 buf 与“a”进行比较,例如:

if(buf == 'a') printf("%s\n", buf);

它不起作用,它不打印任何东西,所以它不输入 if 语句。我需要将缓冲区与字母进行比较,以便我可以更改文件的所有“a”。如何才能我做这个伙计们?

好的,由于下面的答案,这部分已经解决了,但现在我正在尝试读取所有文件并将每个字符与“a”进行比较,制作一个简单的 printf 只是为了看看它是否有效..我写了这个:

int fd = open("teste", O_RDWR);
char buf[1];
int fptr = lseek(fd, 1, SEEK_SET);
fflush(stdout);
read(fd, buf, 1);
while(fptr > 0){
read(fd, buf, 1);
if(buf[0] == 'a'){
printf("%s\n",buf);
}
fflush(stdout);
fptr=lseek(fd, (off_t)(1), SEEK_CUR);
}
close(fd);

但它现在可以工作了..它只打印一个'a',然后不关闭也不做任何事情..它就像一个无限循环但是没有进入if语句。怎么了?

最佳答案

  1. printf("%s\n", buf);UB . %s 想要一个NULL 终止字符串。 使用 printf("%c\n", buf[0]);
  2. if(buf == 'a') 必须是 if(buf[0] == 'a')。您正在将 buf 的地址与 'a' 字符进行比较,但您想比较 buf 数组的第一个(唯一)单元格的内容。

关于c - 如何使用缓冲区和 lseek 更改文件中的某些字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36204645/

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