我追踪了我的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有用。)
如何传入值的地址而不是文字值?
答案 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 [..产生不同的行为..]
不正确。