gpt4 book ai didi

c++ - 字符串在转换为 char* C++ 时被截断

转载 作者:行者123 更新时间:2023-11-28 00:47:46 24 4
gpt4 key购买 nike

如标题所示,我在将字符串转换为 char 数组时遇到了一些问题。

首先让我弄清楚为什么我需要这样做,因为如果我的方法是错误的,我会很乐意采取不同的做法。 (虽然我更希望答案可以直接关注手头的问题)

我有一个包含多行的文件。每行都有格式

b 12 3 4

d 4 1 5.71

...

我想做的是读取每一行(使用 getLine 并将其保存在字符串变量中)并用空格分隔它们,以便将每个字母/数字分开。

为了实现这一点,我采用了 strtok 方法,该方法将 char* 作为参数

这个转换是出了问题的地方。

我采用了几种方法,但总是以相同的方式结束:

尝试 #1 - .data()

const char *converted = new char[(line.size()+1)];
//The sentence is complete in this cout!
cout << line << " -printed string\n";
converted = line.data();
converted[line.size()] = '\0';
//sentence no longer complete!
cout << converted << " -printed char array\n";

尝试 #2 .c_str()

char *converted;
//The sentence is complete in this cout!
cout << line << " -printed string\n";
converted = (char*)line.c_str();
//sentence no longer complete!
cout << converted << " -printed char array\n";

尝试 #3 copy()

char *converted = new char[(line.size()+1)];
//The sentence is complete in this cout!
cout << line << " -printed string\n";
copy(line.begin(), line.end(), converted);
//sentence no longer complete!
cout << converted << " -printed char array\n";

我之前的代码可能有一些语法错误。我是凭内存做的,因为我在尝试不同的方法时删除了代码。关键是,使用 .data()、copy() 和 .c_str() 它们都编译了,并且都给出了相同的输出:

b 12 3 4 -printed string

b -printed char array

现在我已经完成了作业,显然这不是一个完整的第一次。我想我在某处读到可能发生的事情是所有这些方法都将空白空间“”解释为“\0”,因此它在读取“b”后停止。修复它的方法之一是使用 boost 库。

不幸的是,这不是我的选择。我正在研究不能依赖外部库的可交付成果。一些帮助将不胜感激。

提前致谢。

编辑

代码:

(...)
if (fh.is_open()){
while (fh.good()){
getline(fh,line);
char *converted = new char[(line.size()+1)];
cout << line << " -printed string\n";
strcpy(converted, line.c_str());

cout << converted << " -printed char array\n";
(...)

最佳答案

#1 和#2 同样的错误,你必须复制字符,你所做的只是复制指针。

替换

converted = line.data();
converted[line.size()] = '\0';

strcpy(converted, line.c_str());

尝试 #3 更好,但忘记添加空终止符。

也许您应该研究使用 std::string 进行分词的方法,这样您就不会遇到这些麻烦了。

关于c++ - 字符串在转换为 char* C++ 时被截断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15597924/

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