gpt4 book ai didi

c++ - 将 double 转换为字符串。 Boost 库似乎不起作用,sstream 导致 "SEG FAULT"

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:27:46 25 4
gpt4 key购买 nike

我有一个简单的问题,我认为我只是在做一些导致 SEGFAULT 的愚蠢事情。

我只是想将 double 变量转换为字符串,然后将它们“strcat()”在一起,并将生成的串联字符串放入 GTK 标签中。 (应该很简单吧?!)

这是我的代码的一部分:

double fps_target = 2.71828
std::string fps_target_string;
std::stringstream convert;
convert << fps_target;
fps_target_string = convert.str();
g_print("seg fault occurs below");
label_fps_target = gtk_label_new(strcat("FPS Target: ",
(const char*) fps_target_string.c_str()));

为什么它不能工作?! :(

我尝试使用 Boost::Lexical_Cast 的东西,但是没有用:

double fps_target = 3.14159;
const char* fps_target_string = (const char*) (boost::lexical_cast<std::string>(fps_target));

非常感谢任何帮助。如果这两种方法都能奏效,那就太棒了,但我并不真正在意如何去做,只要我能用字符串得到一个 double to cat 即可!

最佳答案

它甚至不应该编译。确保将编译器的警告和一致性级别设置为高。从长远来看,这将为您省去很多麻烦。

让我们看看strcat's signature :

char *strcat( char *dest, const char *src );

因此,它采用 char* 作为第一个参数。但是 "FPS Target: " 的类型 char const[13] 会衰减为 char const*,不能作为 传递字符*char* 允许修改,但 char const* 不允许(字符串文字不可变!)。第一个参数是 char* 因为这是将要放置结果的缓冲区。你不能把它放在那个字符串文字中,因为:

  1. 字符串文字是只读的;
  2. 该字符串文字不够大。

第二个参数不需要转换,因为 c_str() 的返回类型已经是 char const*

连接字符串的最简单方法是使用 std::string 而不必费心使用 C 库字符串操作函数。

std::string result = "FPS Target: " + fps_target_string;
g_print("seg fault doesn't occur below");
label_fps_target = gtk_label_new(result.c_str());

由于代码已经在使用 stringstream,因此更简单的方法是将两个部分都插入到流中。

std::stringstream convert;
convert << "FPS Target: " << fps_target;
std::string result = convert.str();
g_print("seg fault doesn't occur below");
label_fps_target = gtk_label_new(result.c_str());

关于c++ - 将 double 转换为字符串。 Boost 库似乎不起作用,sstream 导致 "SEG FAULT",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11850766/

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