在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]);