[英]Segmentation fault when trying to convert int to const char
我有一段我不太了解的错误。 它发生在这一行:
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为止)。 由于您不拥有此内存,因此将创建段错误。
这就是为什么进行类型转换通常不是一个好主意(除非您真的知道自己在做什么,否则无法解决)。 它告诉编译器“我知道我在做什么,所以请不要在这里帮助我”-在这种情况下,这是错误的。
您可能想要做的是将整数转换为有效的C样式字符串(以N终止的字符数组),然后可以使用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
由作为suggeseted 顶峰 。
似乎您正在尝试将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。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.