Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.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/4/jquery-ui/2.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
什么是;缓冲区[获取]='\0'&引用;你在这个代码里有什么意思? #包括 #包括 int main(int argc,char*argv[]) { 字符缓冲区[6]; int-get; printf(“%s”,argv[1]); int fh=打开(argv[1],仅限Ordu); printf(“文件句柄%d\n”,fh); while(get=read(fh,buffer,6)){ 缓冲区[获取]='\0'; printf(“%s”,缓冲区); } 返回0; }_C - Fatal编程技术网

什么是;缓冲区[获取]='\0'&引用;你在这个代码里有什么意思? #包括 #包括 int main(int argc,char*argv[]) { 字符缓冲区[6]; int-get; printf(“%s”,argv[1]); int fh=打开(argv[1],仅限Ordu); printf(“文件句柄%d\n”,fh); while(get=read(fh,buffer,6)){ 缓冲区[获取]='\0'; printf(“%s”,缓冲区); } 返回0; }

什么是;缓冲区[获取]='\0'&引用;你在这个代码里有什么意思? #包括 #包括 int main(int argc,char*argv[]) { 字符缓冲区[6]; int-get; printf(“%s”,argv[1]); int fh=打开(argv[1],仅限Ordu); printf(“文件句柄%d\n”,fh); while(get=read(fh,buffer,6)){ 缓冲区[获取]='\0'; printf(“%s”,缓冲区); } 返回0; },c,C,此部分将文件作为输入并打印文件的内容。我提供的文本文件包含“hello”。什么是buffer[get]='\0'在此代码中执行什么操作?它在您读入的字符串末尾添加一个空字符('\0')。如果没有它,在缓冲区中打印值可能会超过“hello”的结尾,并可能打印垃圾值。将“\0”字符称为字符串终止符。这使字符串函数知道传递给它的内存区域中的字符串已完成。这有助于避免在内存中读得太远。它确保有一个NUL字符来终止C样式字符串,以确保与printf一起使用时安全: 在C++中有更好的类型,如代码> STD

此部分将文件作为输入并打印文件的内容。我提供的文本文件包含“hello”。什么是
buffer[get]='\0'在此代码中执行什么操作?

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

将“\0”字符称为字符串终止符。这使字符串函数知道传递给它的内存区域中的字符串已完成。这有助于避免在内存中读得太远。

它确保有一个NUL字符来终止C样式字符串,以确保与
printf一起使用时安全:

在C++中有更好的类型,如<>代码> STD::String >:

#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;
}
#包括
#包括
#包括
#包括
#包括
int main(int argc,char*argv[]){
如果(argc<2)
返回-1;
std::数组缓冲区;
printf(“%s\n”,argv[1]);
int fh=打开(argv[1],仅限Ordu);
printf(“文件句柄%d\n”,fh);
而(int get=read(fh,buffer.data(),buffer.size()){
std::cout.write(buffer.data(),get);
}
}

Null终止字符串

“\0”
是空终止字符
get
read()
函数设置,该函数将返回读取的字符数,因此
buffer[get]
将是数组中的下一个点(因为它是基于0的)


null终止允许C知道字符串何时结束。由于每次读取都要重复使用缓冲区,因此不可能事先知道缓冲区中会有什么内容,因此手动空终止是最佳选择。

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

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

如果没有,所有标准字符串函数都将无法工作,因为它们会越界寻找它


由于使用了终止符,任何字符串(例如6个字符)都需要至少7个字符的空间,以适应终止符。

它添加了nul终止符,并可能导致缓冲区溢出-因为读取可以返回6,
#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);
    }
}