在C语言中使用命令行参数
我有下面的代码,我试图访问命令行参数,但在这样做时遇到了问题在C语言中使用命令行参数,c,command-line-arguments,C,Command Line Arguments,我有下面的代码,我试图访问命令行参数,但在这样做时遇到了问题 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h> int main(int argc, char *argv) { int fd = open("drawing.ppm", O_RDWR | O_CREAT | O_APPEND, 0700); char colo
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
int main(int argc, char *argv) {
int fd = open("drawing.ppm", O_RDWR | O_CREAT | O_APPEND, 0700);
char colour[] = "0 0 0 ";
if(argv[1] == "red") {
char colour[] = "255 0 0 ";
}
printf("%s\n", &argv[1]);
int date = write(fd, colour, sizeof(colour));
close(fd);
}
#包括
#包括
#包括
#包括
int main(int argc,char*argv){
int fd=打开(“drawing.ppm”,O|RDWR | O|CREAT | O|u APPEND,0700);
字符颜色[]=“0”;
如果(argv[1]=“红色”){
字符颜色[]=“255 0”;
}
printf(“%s\n”,&argv[1]);
int date=写入(fd、颜色、大小(颜色));
关闭(fd);
}
当我运行代码时,终端显示1▒代码>这是一些奇怪的意外符号。有人能告诉我为什么这不起作用吗?一些事情
首先,您对main()
的签名是错误的,应该是错误的
int main(int argc, char *argv[])
请注意,argv
是字符串而不是字符的数组(指针)
其次,不检查是否传递了任何参数
差不多
if (argc > 2)
第三,您的打印输出是argv[1]
的地址,而不是argv[1]
尝试(在argc
检查内部/之后)
argv[1]
的类型是char*
,您可以尝试与运算符==
一起使用,该运算符对字符串类型变量很有用。这里比较的是两个指针,实际上是两个内存地址
您可以尝试使用strcmp
来比较指针指向的对象的内容。您声明2倍颜色变量,注意第二个变量是if作用域的局部变量。它是char**argv
,首先需要使用strcmp()
来比较字符串。char color[]=“255 0”代码>仅在范围内“可见”,如果(argv…
范围内,它不会改变外部范围内的颜色。您应该使用strcmp来比较字符串。您还应该指出,即使argv[1]
是“red”
,此代码仍将写入“0 0”
,因为color
的第二个声明仅在if
范围内有效。还请指出argv[1]==“red”
比较指针,而不是内容,并且应该使用strcmp
。这是一个很好的观察结果,其他答案都没有提到。这个答案不值得投否决票。我的UV。==
不能用于比较C中的“字符串类型变量”
printf("%s\n", argv[1]);