什么是“缓冲[gotten] ='\ 0';”在这段代码中?

时间:2017-10-08 18:52:49

标签: c

<div class="form-group">
   <?= Html::submitButton('Summit', ['class' => 'btn btn-primary', 'name' => 'test-button', 
      'id' => 'my_button', 'onclick' => '$("#my_button").attr("disabled", "disabled");' ]) ?>
 </div>

此部分将文件作为输入并打印文件的内容。我提供的文本文件包含“hello”。 #include<stdio.h> #include<fcntl.h> int main(int argc, char *argv[]) { char buffer[6]; int gotten; printf("%s",argv[1]); int fh = open(argv[1],O_RDONLY); printf("File handle %d\n", fh); while (gotten = read(fh, buffer, 6)) { buffer[gotten] = '\0'; printf("%s", buffer); } return 0; } 在此代码中做了什么?

6 个答案:

答案 0 :(得分:1)

确保有一个NUL字符来终止C风格的字符串,以便安全地使用printfhttps://en.wikipedia.org/wiki/Null-terminated_string

在C ++中有更好的类型,例如std::string

<强> Live On Coliru

#include <fcntl.h>
#include <unistd.h>
#include <cstdio>
#include <array>
#include <iostream>

int main(int argc, char *argv[]) {

    if (argc < 2)
        return -1;

    std::array<char, 6> buffer;
    printf("%s\n", argv[1]);

    int fh = open(argv[1], O_RDONLY);

    printf("File handle %d\n", fh);

    while (int gotten = read(fh, buffer.data(), buffer.size())) {
        std::cout.write(buffer.data(), gotten);
    }
}

答案 1 :(得分:0)

它会在您读入的字符串末尾添加一个空字符('\0')。如果没有它,打印buffer中的值可能会超过"hello"的结尾打印垃圾值。

答案 2 :(得分:0)

&#39; \ 0&#39;字符称为字符串终止符。这使字符串函数知道您传递给它的内存区域中的字符串已完成。这有助于避免在内存中读取太多内容。

答案 3 :(得分:0)

Null终止字符串。

'\0'是空终止字符。 gotten函数设置read(),它将返回读取的字符数,因此buffer[gotten]将成为数组中的下一个位置(因为它基于0)。 / p>

空终止允许C知道字符串何时结束。由于您在每次读取时都重复使用缓冲区,因此无法事先知道缓冲区中的内容,因此手动空终止是最佳选择。

答案 4 :(得分:0)

中的字符串是char数组,其中字符串的最后一个字符是\0字符,用于标记字符串的结尾。由于从文件中读取字符不包含\0字符,因此需要手动添加,以便将其视为普通字符串。

答案 5 :(得分:0)

在C中,char字符串实际上称为 null终止 字符串'\0'字符是“空终止符”(不要与空指针混淆)。

如果缺少,那么所有标准字符串函数都不起作用,因为它们将超出界限寻找它。

由于终止符,任何字符串都是例如至少 7 个字符需要6个字符,以便能够适应终结符。