<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;
}
在此代码中做了什么?
答案 0 :(得分:1)
确保有一个NUL字符来终止C风格的字符串,以便安全地使用printf
:https://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)
c中的字符串是char
数组,其中字符串的最后一个字符是\0
字符,用于标记字符串的结尾。由于从文件中读取字符不包含\0
字符,因此需要手动添加,以便将其视为普通字符串。
答案 5 :(得分:0)
在C中,char
字符串实际上称为 null终止 字符串。 '\0'
字符是“空终止符”(不要与空指针混淆)。
如果缺少,那么所有标准字符串函数都不起作用,因为它们将超出界限寻找它。
由于终止符,任何字符串都是例如至少 7 个字符需要6个字符,以便能够适应终结符。