C++ c_str在字符串末尾添加奇怪的字符
问题描述:
让我先感谢您花时间阅读本文。C++ c_str在字符串末尾添加奇怪的字符
我想读C++中的文件。目前我有一个方法允许用户在浏览器中选择一个文件,并将其作为'std :: string'返回。然后我必须打开这个文件,但是我为此使用的方法使用了const char *。所以我需要从一个转换到另一个。
如果在Windows中使用字符串读取文件时有一个简单的方法,那么让我知道它会解决我的整个问题。
当我从字符串转换为const char *时,使用str.c_str(),最后我得到了很多奇怪的字符。我研究过其他相同问题的主题,但答案似乎都非常针对这些项目,或者说只是坚持使用sting/vector。显然我会很乐意这样做,但是我没有使用字符串/矢量打开文件的方法。
任何帮助表示赞赏:)下面粘贴这种情况的代码和输出。
* SOURCE
std::string f;
if (LOWORD(wParam) == 1) {
f = openFile();
char *fchar = new char[f.size()+1]; // +1 to account for \0 byte
//char *fchar = std::vector[1];
std::strncpy(fchar, f.c_str(), f.size());
file1 = fchar;
std::cout<<"string size: " << f.size() << std::endl;
std::cout<<"string: " << f << std::endl;
std::cout<<"fchar: " << fchar << std::endl;
std::cout<<"file1: " << file1 << std::endl;
}
输出
string size: 33
string: C:\Users\Joseph\Pictures\back_raw
fchar: C:\Users\Joseph\Pictures\back_raw═²²²²½½½½½½½½¯■
file1: C:\Users\Joseph\Pictures\back_raw═²²²²½½½½½½½½¯■**
答
std::strncpy()
不会在字符串末尾放置一个'\ 0' 字符。见http://www.cplusplus.com/reference/clibrary/cstring/strncpy/。你需要复制,以及:
std::strncpy(fchar, f.c_str(), f.size() + 1);
答
哪里文件1申报? openFile呢? (想知道它的返回类型)
你可以尝试手动把'\ 0'吗?恕我直言,你的char *在结尾处根本缺少\ 0 ...
答
请确保你在最后的地方放置了一个\0
。
谢谢!这是问题:) – planty182 2012-04-19 12:42:08