如何将 gchar* 转换为 char

How to convert gchar* to char

当我按下键盘上的一个键(整数)时。它的作用类似于:

 gchar *keypressed;
 keypressed=gdk_keyval_name (event->keyval);
 printf("The KeyEvent is: %s\n", keypressed); // Till here it is fine    

执行此操作时出现分段错误:

char ch;
sprintf(ch, "%s\n", keypressed);   
printf("The NewKeyEvent is: %s\n",ch);

我需要转换它,因为我要在switch case中使用该值。不转换是不可能的。

gcharchartypedef 别名,所以问题不在于类型转换。您需要为 sprintf 缓冲区分配一些 space。

目前,您正在将单个未初始化的 char 传递到指针应位于的位置。除了由未定义行为引起的段错误之外,您应该从编译器得到警告。

要解决此问题,请创建一个 char 数组并将其传递给 sprintf

char ch[10];
sprintf(ch, "%8s\n", keypressed);   
printf("The NewKeyEvent is: %s\n", c);

注意 sprintf 中 8 的限制。这是因为 ch 的大小为 10,我们需要两个额外的点用于 '\n''[=21=]'

如果您只需要 keypressed 字符串中的单个字符,有两种方法:

  1. 使用数组索引,这样你就可以访问字符串中的任何字符:

    char ch = keypressed[x];  // Where `x` is the character number you want
    

    记住数组索引从零开始,所以字符串中的第一个字符是数字0

  2. 如果想要第一个字符,也可以使用解引用运算符

    char ch = *keypressed;
    

    这相当于

    char ch = keypressed[0];