C++中cout打印内容丢失

发布时间 2023-06-28 09:07:31作者: liqinglucky

原文地址:https://www.cnblogs.com/liqinglucky/p/cout.html

写代码时遇到C++中cout打印不全的问题。

现象

代码调整前:

我有个函数c_func (output, input, inlen)定义在原来的文件file.c里,然后在c++中调用了这个函数。

file.cpp文件里的调用格式如下:

cpp_func()
{
	c_func (output, input, inlen);

	cout<<__FUNCTION__<<" input str:"<<input<<" output md5 str: "<<output<<" md5 len: "<<output.length()<<endl;
}

count的打印应该为:

cpp_func input str: EB7432B9131D60BBEBD output md5 str: ▒Bj]▒▒?ZҬ▒ԭ▒▒ len: 34

代码调整后:把file.c重命名为file1.c并把函数c_func (output, input, inlen)定义移动到文件最后。这个时候我重新编译运行就发现cout打印有缺失,现象如下:

▒▒>&▒3▒w md5 len: 34 output md5 str: ▒▒▒▒
[缺失了函数名和input部分打印]  [output md5 str的打印放到了首尾]

原因

背景知识:程序编译过程与运行时内存 - liqinglucky - 博客园 (cnblogs.com)

我看了makefile才发现,makefile中使用的还是用的旧文件的file.o文件导致file1.o是没用上的。因为file1.o跟file.o的代码段是很相近的,所以出现了c_func执行后导致函数内存地址出现了偏移导致的。

解决

makefile中将file.o文件名替换为file1.o后重新编译。