Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何用数字替换文件中连续出现的字符_C_String_File_Pointers_File Descriptor - Fatal编程技术网

C 如何用数字替换文件中连续出现的字符

C 如何用数字替换文件中连续出现的字符,c,string,file,pointers,file-descriptor,C,String,File,Pointers,File Descriptor,在我的代码中,我成功地打开了文件,但现在我不知道如何使用read函数执行循环,以获取file1中的所有字符。我设置了大小为8的缓冲区,但文件内容更多 谢谢。另外,请帮助我使用类似这样的系统调用来完成此操作您正在混淆字符和指向字符的指针: 是一个指向字符的指针数组,它应该包含指针,而不是字符。您需要的是一个字符数组: 现在,当您添加\0时,将出现一个编译器错误。这也意味着它包含一个字符串,这意味着您使用printf的%s转换来打印它,不涉及循环,只需执行以下操作: printf("%s", buf

在我的代码中,我成功地打开了文件,但现在我不知道如何使用read函数执行循环,以获取file1中的所有字符。我设置了大小为8的缓冲区,但文件内容更多


谢谢。另外,请帮助我使用类似这样的系统调用来完成此操作

您正在混淆字符和指向字符的指针:

是一个指向字符的指针数组,它应该包含指针,而不是字符。您需要的是一个字符数组:

现在,当您添加\0时,将出现一个编译器错误。这也意味着它包含一个字符串,这意味着您使用printf的%s转换来打印它,不涉及循环,只需执行以下操作:

printf("%s", buffer);
另外,您的阅读方式是否也是这样?无需循环:

ssize_t count = read(fd1, buffer, sizeof buffer - 1);
if(count < 0)
    return -1;
其思想是从文件中读取一个块,然后根据需要对其进行处理,然后读取另一个块等。当到达文件末尾时,read将返回0,处理将停止

执行此循环的等效方法(可能更容易理解)是:

ssize_t count = read(fd1, buffer, sizeof buffer - 1);
while(count != 0)
{
    // .....

    count = read(fd1, buffer, sizeof buffer - 1);
}

这使得循环直到计数为零变得更加清晰。我使用的技巧是计数=读取。。。分开,放在括号里。计算括号内内容count=read…(计数=读取…)的结果是赋值的结果,即分配给count的内容,即读取的结果。将该语句放在while语句中意味着首先对括号中的部分求值,即它进行读取并分配计数。然后检查分配的结果ie计数是否为零。

欢迎使用SO。请不要在标题中添加C前缀。这就是标签的用途。仅供参考,我们称之为。注释不用于扩展讨论;这段对话已经结束。
ssize_t count = read(fd1, buffer, sizeof buffer - 1);
if(count < 0)
    return -1;
ssize_t count;
while((count = read(fd1, buffer, sizeof buffer - 1)) != 0)
{
    if(count < 0)
        return -1;

    buffer[count] = '\0';
    printf("%s", buffer);

    // Do your processing here
}
ssize_t count = read(fd1, buffer, sizeof buffer - 1);
while(count != 0)
{
    // .....

    count = read(fd1, buffer, sizeof buffer - 1);
}