使用文字与变量索引到argv

时间:2017-04-18 17:44:06

标签: c arrays string pointers reference

我追踪了我的seg故障的来源,并没有寻找解决方法来解决它。

假设argv包含数据{" programName"," 5"}

现在,如果我想将部分argv数据传递给另一个函数,我有两个选择。

      <configuration>
            <archive>
                <index>true</index>
                <manifest>
                      <mainClass>com.company.App</mainClass>
                </manifest>
            </archive>
        </configuration>

传递地址为5。

现在,如果我想通过以下循环执行此functionCall(argv[1]); //passes in the address of 5 次:

n

后面的方法传递5的实际值而不是5的地址,然后导致atoi函数发生段错误。 (它不会对mingw进行分段修改,但对gcc有用。)

如何传入值的地址而不是文字值?

1 个答案:

答案 0 :(得分:2)

functionCall(argv[1]);
     

这会传递5的地址。

不,它没有。对于整数常量,不存在地址,地址用于“对象”。

它传递一个指针(当数组作为函数参数传递时,数组衰减的)到作为程序参数的字符串"5"的开头。

可以这么说

int i;
for (i = 1; i < argc; i++){
    functionCall(argv[i]);
}
只要您的功能描述和用法正常,

就显得合法。例如,对于argc 4的值,代码段

functionCall(argv[1]);
functionCall(argv[2]);
functionCall(argv[3]);

int i;
for (i = 1; i < argc; i++){
    functionCall(argv[i]);
}

是等价的。声明

  

使用文字与变量索引到argv [..产生不同的行为..]

不正确。