原文地址: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后重新编译。
标签:func,打印,C++,丢失,file,input,output,cout From: https://www.cnblogs.com/liqinglucky/p/cout.html