这可能是简单的问题,也可能是la脚的问题。我一直在玩printf
C ++中的函数。当我在Debian Wheezy上使用任何9个字符的参数(例如:“ argument1”)执行以下代码时;
#include<stdio.h>
int main(int argc, char** argv){
printf(argv[1]+'\n');
}
输出是
SSH_AGENT_PID=4375
然后,我检查了环境变量$SSH_AGENT_PID
,其值为4375。
您能告诉我我的代码怎么了吗?(我试图检查gdb中的反汇编代码。但是我的汇编知识很差,无法确切了解发生了什么情况)
解释您从中看到的内容argv[1] + '\n'
。这是指针加整数(字符常量int
在C中具有类型)。
C语言中对它的定义是指针以整数形式前进许多单位。\n
是10
在ASCII所以这将通过10个字符推进指针。如果您的字符串小于10,则您现在正在读取该字符串末尾之外的内存内容。
本·布劳恩(Ben Braun)提出的解决方案很好。另一个选项是puts( argv[1] );
将不执行任何类似于printf的翻译而输出字符串,并输出换行符。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句