尝试将int转换为const char时出现分段错误
Segmentation fault when trying to convert int to const char
我有一个seg错误,我真的不明白。它发生在这一行:
int j = strlen(msg);
有人知道为什么会发生这种事吗?
发生的功能:
void Text::displayText( float x, float y, int r, int g, int b, const char * msg){
int j = strlen(msg);
glColor3f( r, g, b );
glRasterPos2f( x, y );
for( int i = 0; i < j; i++ ) {
glutBitmapCharacter( GLUT_BITMAP_TIMES_ROMAN_24, msg[i] );
}
}
如何调用函数(fps
是整数):
text.displayText(3.1f,2.7f,255,255,255,(char*)fps);
当我只将msg
参数设置为char时,文本显示工作正常。
如果fps
是一个整数,并且很好的猜测是它在1到100之间,那么您正试图从该内存地址区域读取数据(直到找到第一个null)。这将创建一个seg错误,因为您不拥有此内存。
这就是为什么进行类型转换通常是个坏主意(除非你真的知道自己在做什么,否则无法解决它)。它告诉编译器"我知道我在做什么,所以不要试图在这里帮助我"——在这种情况下,这是错误的。
您可能想要做的是将您的interger转换为有效的C样式字符串(以null结尾的字符数组),为此您可以使用itoa()
:
char sFPS[20];
text.displayText(3.1f,2.7f,255,255,255,itoa(fps, sFPS, 10));
对于保持原始displayText
功能不变的兼容解决方案:
char sFPS[20];
sprintf(sFPS, "%d", fps);
text.displayText(3.1f,2.7f,255,255,255,sFPS);
或者,使用天顶建议的std::string
。
您似乎正在尝试将int
转换为字符串。
如果是这种情况,那么使用std::string
,而不是char*
:
void Text::displayText(..., const std::string& msg)
要将int
转换为std::string
,请使用std::to_string
:
text.displayText(3.1f, 2.7f, 255, 255, 255, std::to_string(fps));
注意:std::to_string
在旧版本的C++中不存在,您至少需要C++11。
相关文章:
- 在某些循环内使用vector.push_back时出现分段错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 当我的阵列太大时出现分段错误
- 分段错误当我试图运行程序时出错
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 尝试使用集合函数时出现分段错误
- 我无法缩小此分段错误的原因
- g++的分段错误(在NaN上使用to_string两次时)
- 我是如何在这段代码中出现分段错误的
- 创建结构的数组时遇到分段错误
- 在c++中键入向量中的所有值后,得到分段错误(核心转储)
- 在 c++ 中实现 Trie 时出现分段错误
- 为什么 fstream 在打开带有格式的文件时会导致分段错误?
- 为什么我遇到分段错误?
- 动态类的分段错误(家庭作业问题)
- 分段错误 - 读取初始化指针的数组
- 如何摆脱C ++中的分段错误错误?
- 使用 CTYPE 时出现分段错误
- 为什么代码给出分段错误?