繁体   English   中英

尝试将int转换为const char时出现分段错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM