在C中使用argv?

对于赋值,我需要为我的C程序提供命令行参数。 我之前(在C ++中)使用过argc / argv没有遇到任何麻烦,但我不确定C样式字符串是否会影响它的工作原理。 这是我的主要开始:

int main(int argc, char *argv[]){ if(argc>1){ printf("0 is %s, 1 is %s\n",argv[0],argv[1]); if(argv[1]=="-e"){ // Do some stuff with argv[2] system("PAUSE"); } else{ printf("Error: Incorrect usage - first argument must be -e"); return 0; } } 

所以我将我的程序称为“program.exe -e myargstuff”但是我得到了“Error:Incorrect Usage …”输出,即使我的printf()告诉我argv [1]是“-e”。 请帮忙吗? 谢谢!

这条线

 if(argv[1]=="-e"){ 

比较指针,而不是字符串。 改为使用strcmp函数:

 if(strcmp(argv[1],"-e")==0){ 

更改:

 if(argv[1]=="-e"){ 

 if(strcmp(argv[1], "-e") == 0){ 

并包含string.h

查看getopt()和相关函数; 它会让你的生活更轻松。

你不能比较那样的c字符串。 使用strcmp( 这里引用)。

因为c字符串实际上是指针,所以==运算符会比较第一个字符的地址,在这种情况下,第一个字符的地址永远不会相等。

您不能使用==来比较C中的字符串。这只是比较argv [1]和您的文字的地址,这几乎可以保证不同。

请改用strcmp 。 例如:

 if (!strcmp("-e", argv[1])) { 

main函数的原型说你正在处理char*指针。 在C中,没有运算符重载; 因此,两个char*之间的==将测试它们是否指向同一个地方 。 事实并非如此,而且很少发生这种情况。 从使用strcmp (该函数的引用有效,即使它指向C ++站点)函数:

 strcmp(argv[1], "-e") == 0