首先,我要感谢您花时间阅读本文。
我正在尝试用c ++读取文件。目前我有一个方法允许用户在资源管理器中选择一个文件并将其作为'std :: string'返回。然后我必须打开这个文件,但我的方法使用const char *。因此我需要从一个转换为另一个。
如果Windows中有一个简单的方法用于使用字符串读取文件,那么请告诉我,因为它可以解决我的整个问题。
当我使用str.c_str()从string转换为const char *时,我最后得到了很多奇怪的字符。我已经研究过具有相同问题的其他主题,但答案似乎都非常具体针对那些项目,或者说只是坚持使用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═²²²²½½½½½½½½¯■**
答案 0 :(得分:1)
std::strncpy()
不会在字符串的末尾放置一个“\ 0”字符。见http://www.cplusplus.com/reference/clibrary/cstring/strncpy/。你也需要复制它:
std::strncpy(fchar, f.c_str(), f.size() + 1);
答案 1 :(得分:1)
file1在哪里声明? 那么openFile呢? (想知道它的返回类型)
您可以尝试手动输入'\ 0'吗?恕我直言,你的char *只是在最后缺少\ 0 ......
答案 2 :(得分:1)
确保在最需要的地方放置\0
。