int main(int argc,const char *argv[]) { char buff[20]; int len; len = read(0,buff,sizeof(buff)); write(1,buff,len); } 我这段代码用来输入一个字符串并在显示屏打印出来 但是我打heelo world它并不会显示 只有满20个字节才会打印出来
时间: 2023-12-03 20:46:56 浏览: 21
这是因为在标准输入流(stdin)中,输入的字符并不会立即被发送到程序,而是被缓存起来等待下一次读取操作。当输入的字符数量不足20个字节时,程序会一直等待,直到输入的字符数达到20个字节才会输出。
要解决这个问题,可以使用以下两种方法之一:
1. 在输入字符串后手动添加回车符('\n')或者Ctrl+D结束输入,这样程序就会立即读取并输出字符串。
2. 使用无缓存的输入流,可以使用下面的代码来实现:
```c
#include <stdio.h>
int main(int argc, const char *argv[]) {
char buff[20];
int len;
setbuf(stdin, NULL); // 禁用输入缓存
len = read(0, buff, sizeof(buff));
write(1, buff, len);
return 0;
}
```
这样输入的字符就会立即被发送到程序中,不再等待缓存。
相关问题
int main(int argc, char **argv)详细分析
`int main(int argc, char **argv)` 是 C/C++ 中的程序入口函数,通常是程序中的第一个被执行的函数。它的返回值类型为整型,表示程序的退出状态码。`argc` 表示命令行参数的数量,`char **argv` 表示命令行参数的字符串数组。
在命令行中执行程序时,会将程序名及其后面的参数传递给 `main()` 函数。程序名(即可执行文件的名称)被视为第一个参数,因此 `argc` 的值至少为1。后面的参数则作为 `argv` 数组的元素传递给 `main()` 函数。
例如,如果执行命令 `./myprogram arg1 arg2 arg3`,则 `argc` 的值为4,`argv` 的值为 `{"./myprogram", "arg1", "arg2", "arg3"}`。
在 `main()` 函数内部,可以使用 `argc` 和 `argv` 来获取命令行参数,比如:
```c++
int main(int argc, char **argv) {
for (int i = 0; i < argc; i++) {
printf("Argument %d: %s\n", i, argv[i]);
}
return 0;
}
```
这段代码会打印出所有命令行参数的值和索引。
需要注意的是,`main()` 函数可以有两种形式:
```c++
int main() {
// ...
}
```
或者
```c++
int main(int argc, char **argv) {
// ...
}
```
第一种形式表示程序不需要获取命令行参数,第二种形式则需要获取命令行参数。
int main(int argc, char** argv)
"int main(int argc, char** argv)" 是 C/C++ 程序的主函数。其中,"int" 表示函数返回值类型为整型;"main" 是函数名称;"(int argc, char** argv)" 是函数参数,分别表示程序参数个数和程序参数数组。