如何用数字替换文件中连续出现的字符
How to replace successive occurrences of characters in a file by the number
在我的代码中,我成功打开了文件,但现在我不明白如何使用 read() 函数执行循环,以获取 file1
中的所有字符。我设置了大小为8的缓冲区,但是文件内容更多。
谢谢。也请帮助我使用这样的系统调用来做到这一点
您对 char
和指向 char
的指针感到困惑:
char *buffer[4096];
是指向字符的指针数组,应该保存指针,而不是 chars
。你想要的是 char
:
的数组
char buffer[4096];
现在,当您添加 [=20=]
时,您将遇到编译器错误。这也意味着它包含一个字符串,这意味着您使用 %s
转换为 printf
来打印它,不涉及循环,只需执行:
printf("%s", buffer);
另外,你的 read
像这样(同样不需要循环):
ssize_t count = read(fd1, buffer, sizeof buffer - 1);
if(count < 0)
return -1;
这将最多读取 4095 个字节到您的数组中,具体取决于文件的大小。这为您的 [=20=]
.
留出了空间
因此,为了确保您阅读了所有文件,请执行以下操作:
ssize_t count;
while((count = read(fd1, buffer, sizeof buffer - 1)) != 0)
{
if(count < 0)
return -1;
buffer[count] = '[=14=]';
printf("%s", buffer);
// Do your processing here
}
想法是从文件中读取一个块,然后根据需要处理它,然后读取另一个块等。当到达文件末尾时,read
将 return 0
并且您的处理将停止。
执行此循环的等效方法可能更容易理解:
ssize_t count = read(fd1, buffer, sizeof buffer - 1);
while(count != 0)
{
// .....
count = read(fd1, buffer, sizeof buffer - 1);
}
这更清楚地表明您正在循环直到 count
为零。我使用的技巧是将 count = read(...)
部分放在括号内。评估括号内内容 (count = read(...))
的结果是赋值的结果(即赋值给 count
的结果是 read
的结果)。将它放在 while
语句中意味着首先评估括号中的部分(即它执行 read
并分配 count
)。然后检查赋值的结果(即 count
)是否为零。
在我的代码中,我成功打开了文件,但现在我不明白如何使用 read() 函数执行循环,以获取 file1
中的所有字符。我设置了大小为8的缓冲区,但是文件内容更多。
谢谢。也请帮助我使用这样的系统调用来做到这一点
您对 char
和指向 char
的指针感到困惑:
char *buffer[4096];
是指向字符的指针数组,应该保存指针,而不是 chars
。你想要的是 char
:
char buffer[4096];
现在,当您添加 [=20=]
时,您将遇到编译器错误。这也意味着它包含一个字符串,这意味着您使用 %s
转换为 printf
来打印它,不涉及循环,只需执行:
printf("%s", buffer);
另外,你的 read
像这样(同样不需要循环):
ssize_t count = read(fd1, buffer, sizeof buffer - 1);
if(count < 0)
return -1;
这将最多读取 4095 个字节到您的数组中,具体取决于文件的大小。这为您的 [=20=]
.
因此,为了确保您阅读了所有文件,请执行以下操作:
ssize_t count;
while((count = read(fd1, buffer, sizeof buffer - 1)) != 0)
{
if(count < 0)
return -1;
buffer[count] = '[=14=]';
printf("%s", buffer);
// Do your processing here
}
想法是从文件中读取一个块,然后根据需要处理它,然后读取另一个块等。当到达文件末尾时,read
将 return 0
并且您的处理将停止。
执行此循环的等效方法可能更容易理解:
ssize_t count = read(fd1, buffer, sizeof buffer - 1);
while(count != 0)
{
// .....
count = read(fd1, buffer, sizeof buffer - 1);
}
这更清楚地表明您正在循环直到 count
为零。我使用的技巧是将 count = read(...)
部分放在括号内。评估括号内内容 (count = read(...))
的结果是赋值的结果(即赋值给 count
的结果是 read
的结果)。将它放在 while
语句中意味着首先评估括号中的部分(即它执行 read
并分配 count
)。然后检查赋值的结果(即 count
)是否为零。