在 GLUT 中打印整数的函数 - 如何编写用于 int 到 char 转换的函数?

Function to print integer in GLUT - How to write a function for int to char conversion?

我正在学习 C,但在某些时候一切都变得太抽象了,所以我决定使用 OpenGL 来尝试涉及用户交互的更具体的事情。我也在努力确保我的代码是 portable,所以我总是 运行 它在我的 Mac Pro、Raspberry Pi 和旧的 Power Mac.

我创造了一个小颜色table来帮助我的生活:

GLfloat white[3] = { 1.0, 1.0, 1.0 };
GLfloat red[3] = { 1.0, 0.0, 0.0 };
GLfloat green[3] = { 0.0, 1.0, 0.0 };
GLfloat blue[3] = { 0.0, 0.0, 1.0 };
GLfloat yellow[3] = { 1.0, 1.0, 0.0 };
GLfloat dark_gray[3] = { 0.2, 0.2, 0.2 };

以及以下打印文本的函数:

void printText(char *text, const GLfloat colour[3], float posX, float posY) {
    glColor3fv (colour);
    glRasterPos2f(posX, posY);
  
    while(*text){
       glutBitmapCharacter(GLUT_BITMAP_8_BY_13, *text++);
    }

}

我这样称呼,例如:printText(fn, white, 0.90f, 0.92f); 而且效果很好!

我正在根据我在论坛中找到的代码进行整数到字符串的转换以打印屏幕帧速率计数器,我想我很清楚它在做什么:

int length = snprintf( NULL, 0, "%d", frame_number );
char *fn = malloc( length + 1 );
snprintf(fn, length + 1, "%d", frame_number );
printText(fn, white, 0.90f, 0.92f);

我不想每次都想在屏幕上打印一个整数时写所有这些代码,但我所做的一切都不起作用。

char charToInt(int integer) {
int length = snprintf( NULL, 0, "%d", integer);
char *convertedInteger = malloc(length + 1);
snprintf(convertedInteger, length + 1,"%d", integer);
return convertedInteger;}

return *convertedInteger; 都在我尝试调用 printText(convertedInteger,colour,posX,posY);

时崩溃

有什么建议吗?

我整理了一下:

我是这样称呼它的: GLprintTextAndInteger("just a bunch of words", int_to_print, colour, posX, posY);

这是函数:

void GLprintTextAndInteger (char *text, int value, float colour[3], float posX, float posY) {
int length = snprintf(NULL, 0, "%s %i", text, value);
char *stringToPrint = malloc(length + 1);
snprintf(stringToPrint, length + 1, "%s %i",text,value);
printText(stringToPrint,colour,posX,posY);
free(printText);
}

然后它正确调用了我在问题中提到的函数:

void printText(char *text, const GLfloat colour[3], float posX, float posY) {
glColor3fv (colour);
glRasterPos2f(posX, posY);

while(*text){
   glutBitmapCharacter(GLUT_BITMAP_8_BY_13, *text++);
}

谢谢大家!

编辑:释放内存以避免评论中提到的泄漏。