对于作业,我需要为我的C程序提供命令行参数。我之前使用argc / argv(在C ++中)没有遇到麻烦,但我不确定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”。请帮忙吗?谢谢!
答案 0 :(得分:15)
答案 1 :(得分:6)
变化:
if(argv[1]=="-e"){
到
if(strcmp(argv[1], "-e") == 0){
并加入string.h
。
答案 2 :(得分:5)
查看getopt()
及相关功能;它会让你的生活更轻松。
答案 3 :(得分:3)
你无法比较那样的c字符串。使用strcmp(引用here)。
因为c字符串实际上是指针,所以==运算符会比较在这种情况下永远不会相等的第一个字符的地址。
答案 4 :(得分:2)
您无法使用==
来比较C中的字符串。这只是比较argv [1]和您的文字的地址,这几乎可以保证不同。
请改用strcmp
。例如:
if (!strcmp("-e", argv[1])) {
答案 5 :(得分:1)
主函数的原型说你正在处理char*
指针。在C中,没有运算符重载;因此,两个==
之间的char*
将测试他们是否指向同一个地方。情况并非如此,很少是这种情况。从<string.h>
使用strcmp
(函数的引用即使它指向C ++站点也是有效的)函数:
strcmp(argv[1], "-e") == 0