c++ - C++ 中带有换行符的 printf 的奇怪行为

标签 c++ linux gdb printf

这可能是一个简单或蹩脚的问题。我一直在玩 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/

相关文章:

c++ - ExTAPI : lineRegister returns before line is registered

c++ - unique_ptr 链表插入 - 与 operator= 不匹配

c++ - 歧义语句 C++-AMP : (extent) is ambiguous

linux - shell类型 session 中的变量

c - 如何防止 gdb 在下一个命令后停止

linux - 无法在 GDB 中加载自定义 ELF 可执行文件

c++ - 在 gdb 中获取字符串中的迭代器位置

c++ - 如何设置语音SAPI5

java - 须藤: effective uid is not 0 when running under tomcat service

linux - 向 aspell 添加许多词典