我正在尝试构建一个类似echo的命令,我在xv6命名为code
。问题是如果:
输入:
$code Hello World
输出:
user space:Hello user space:World
正确的输出应该是:
user space: Hello World
有人能帮助我吗?
int
main(int argc, char *argv[])
{
int i;
if(argc <= 1){
printf(1," %s user space:", argv[0]);
exit();
}
for(i = 1; i < argc; i++){
printf(1, " print in user space:%s",argv[i]);
}
printf(1, "\n");
exit();
}
答案 0 :(得分:0)
程序名也作为参数传递给你的main函数,所以你在这里有三个(作为hello和world被认为是单独的参数)参数。你的代码中有几个问题,因为如果语句为false,你首先有两个参数,并且您没有在for循环中正确打印,以下可能会有所帮助:
int main(int argc, char *argv[])
{
int i;
printf("number of arguments : %d ",argc);
//argv array index count from 0
for(i = 0; i < argc; i++){
printf("argument number %d : %s",i,argv[i]); // issue in your code
}
printf("\n");//issue in your code
exit(0);
}
答案 1 :(得分:0)
可以使用write命令,以便输出到stdout。在每个命令行参数之间需要写入一个额外的空格。
#include <stdio.h>
#include <string.h>
#include <unistd.h>
int main(int argc, char *argv[]) {
int i;
write(1, "user space: ", 12);
for (i = 1; i < argc; i++) {
size_t len = strlen(argv[i]);
write(1, argv[i], len);
write(1, " ", 1);
}
write(1, "\n", 1);
return 0;
}
答案 2 :(得分:0)
代码中有问题的部分在这里:
for(i = 1; i < argc; i++){
printf(1, " print in user space:%s",argv[i]); //" print in user space:" is printed
//for each iteration
}
正如其他人指出的那样,你应该做:
printf(" print in user space:\n");
for(i = 1; i < argc; i++){
printf("%s",argv[i]);
}
那就是说了几句话:
我从未见过一个以整数作为第一个参数的printf,我假设第一个参数不重要/是一个错字
我不是专家unix开发人员,但您可以使用“return 0”(或“return 1”)退出程序。您也可以通过这种方式返回错误代码,就像大多数unix程序一样
如果您决定使用printf,请注意它为恶意用户提供了一个令人讨厌的安全漏洞which can expose the caller's stack。确保您的输入格式正确或尽可能使用其他功能