为啥字符 ÌÌÌÌ 卡在我的字符串开头?

Posted

技术标签:

【中文标题】为啥字符 ÌÌÌÌ 卡在我的字符串开头?【英文标题】:Why do the characters ÌÌÌÌ get stuck onto the begining of my strings?为什么字符 ÌÌÌÌ 卡在我的字符串开头? 【发布时间】:2010-07-22 20:15:20 【问题描述】:

我一直在使用 openCV 开发一些计算机视觉工具,但是每次我将字符串传递给 openCV 函数时,字符 ÌÌÌÌ 都会被标记到开头。起初这很烦人,但现在我正在尝试使用 openCV 的 fileStorage 工具,而 ÌÌÌÌ 字符使我的文件名不可读。

注意:只有当我将字符串传递给新的 c++ 风格的 openCV 函数时,才会添加字符。如果我使用旧的 C 风格函数,字符串会很好。

示例: 我输入这个:

namedWindow("CBImage", 1);
.
.
.
imshow("CBImage", Frame);

但窗口标题显示为 ÌÌÌÌCBImage

我认为问题不一定是 openCV 特有的;我认为这与一般的字符串使用有关。检查此链接,编码器似乎遇到了类似的问题。 http://www.sfml-dev.org/forum/viewtopic.php?t=1257&sid=5cfa50b780e47685d1c03296adffa8ed

有什么想法吗? 谢谢


感谢大家的帮助。 KennyTM 的原始建议确实解决了这个问题。我不得不用调试版本替换我的 cv cvaux cvcore 和 highgui 库(可能必须根据您运行的 openCV 版本来构建它们,检查 openCV 目录中的 lib 文件夹)。

【问题讨论】:

您使用的是 Visual C++ 吗?如果是,请检查 Ì 的十六进制值。要么是0xcc 要么是0xcd(我忘了哪个)。无论哪种方式,都意味着指向的内存是未初始化的(0xcc 是一个标志,用于指示堆栈上未初始化的内存;0xcd 是用于堆上未初始化的内存)。 您是否按照您链接到的帖子的解决方案中提到的那样混合了调试和发布二进制文件(意外或其他原因)? 【参考方案1】:

Given that ÌÌÌÌ = 0xCCCCCCCC,似乎库不希望在字符串成员之前有一个 4 字节的成员,例如

// Provided.
struct something 
   ...
   void* some_pointer; // uninitialized variables are filled with 0xCC in debug mode.
   char the_actual_content[1234];
   ...


// But the library wants
struct something 
   ...
   char the_actual_content[1234]; // now the 0xCCCCCCC is shifted into this string.
   ...

您是否尝试过链接中的建议?

不要混合调试和发布配置如果您处于调试模式,请使用“-d”后缀链接到库。

【讨论】:

感谢您的帮助。我确实尝试链接​​到调试库,但这没有用。不过,我想我知道为什么。来自opencv.willowgarage.com/wiki/VisualC%2B%2B_VS2008 的引用“仅当您构建随 OpenCV 安装提供的 Visual C++ .NET 解决方案时,调试版本才可用。”对于其他 openCV 用户:您确实需要链接器文件的调试版本(如果您处于调试模式) @不是:嗯。假设@Ben 是正确的,你可以试试string name = "CBImage"; 并用name 调用这两个函数吗? 字符串名称 = "CBImage";命名窗口(名称,1); . . . imshow(名称,框架);运行,但它仍然将字符标记到字符串的开头。 再次感谢您的帮助。一旦我构建了调试库并将它们添加到我的项目中,问题就消失了!。【参考方案2】:

正在读取尚未初始化的内存。有关 MSVC 的哪些调试版本可能会将未初始化或不可用内存设置为的详细信息,请参阅以下答案:

When and why will an OS initialise memory to 0xCD, 0xDD, etc. on malloc/free/new/delete?

【讨论】:

【参考方案3】:

您可能将std::string 的地址传递给一个函数,该函数需要一个对std::string 的引用(不是指针),并且还有一个接受void* 的版本。

【讨论】:

但这两个函数都需要const string&。 opencv.willowgarage.com/documentation/cpp/….

以上是关于为啥字符 ÌÌÌÌ 卡在我的字符串开头?的主要内容,如果未能解决你的问题,请参考以下文章

jQuery事件附件

般若波罗蜜多心经

C:用printf()显示特殊字符

整理Pì丨数据可视化-图表制作工具集

“逆”字怎么读?

联合体变量做函数参数的使用方法