我在使用 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语句。怎么了?