gpt4 book ai didi

string - c++ c_str在字符串的末尾添加奇怪的字符

转载 作者:行者123 更新时间:2023-12-04 05:49:42 25 4
gpt4 key购买 nike

首先让我感谢您抽出时间阅读本文。

我正在尝试用 C++ 读取文件。目前我有一种方法允许用户在资源管理器中选择一个文件并将其作为“std::string”返回。然后我必须打开这个文件,但我为此使用的方法使用 const char*。因此,我需要从一种转换为另一种。

如果 Windows 中有一种简单的方法可以使用字符串读取文件,那么请告诉我,因为它可以解决我的整个问题。

当我使用 str.c_str() 从字符串转换为 const char* 时,我在最后得到了很多奇怪的字符。我已经研究了具有相同问题的其他主题,但是对于这些项目,答案似乎都非常具体,或者说只是坚持使用 sting/vector。显然我很乐意这样做,但我没有使用字符串/向量打开文件的方法。

任何帮助表示赞赏:) 下面粘贴了发生这种情况的代码和输出。

* 来源

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);

关于string - c++ c_str在字符串的末尾添加奇怪的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10227806/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com