什么是;缓冲区[获取]='\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; }
此部分将文件作为输入并打印文件的内容。我提供的文本文件包含“hello”。什么是什么是;缓冲区[获取]='\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
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);
}
}