在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