这可能是一个简单或蹩脚的问题。我一直在玩 C++ 中的 printf
函数。当我使用任何 9 个字符的参数(例如:“argument1”)在 Debian Wheezy 上执行以下代码时;
#include<stdio.h>
int main(int argc, char** argv){
printf(argv[1]+'\n');
}
输出是;
SSH_AGENT_PID=4375
然后我检查了环境变量$SSH_AGENT_PID
,它的值是4375。
你能告诉我我的代码是怎么回事吗? (我试图检查 gdb 中的反汇编代码。但我的汇编知识很差,无法准确理解发生了什么)
最佳答案
简单修复:
printf("%s\n", argv[1]);
这是对代码的改进,原因有二:首先,将 printf 的第一个参数设置为字符串常量通常是个好主意,因为这可以防止 printf 代码注入(inject)。其次,它修复了错误,因为正如@Captain Oblivious 指出的那样,您编写的代码并没有按照您的想法行事。
关于c++ - C++ 中带有换行符的 printf 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27697551/