当我按下键盘上的一个键(整数)时。它的作用类似于:
gchar *keypressed;
keypressed=gdk_keyval_name (event->keyval);
printf("The KeyEvent is: %sn", keypressed); // Till here it is fine
当我这样做时,我得到分段错误:
char ch;
sprintf(ch, "%sn", keypressed);
printf("The NewKeyEvent is: %sn",ch);
我需要转换它,因为我要在切换情况中使用该值。不转换是不可能的
gchar
是char
的typedef
别名,因此问题不在于类型转换。您需要为sprintf
缓冲区分配一些空间。
当前,您正在传递一个未初始化的char
到指针的位置。除了由未定义的行为引起的段错误之外,您还应该从编译器获得一个警告。
要解决这个问题,创建一个char
s数组并将其传递给sprintf
:
char ch[10];
sprintf(ch, "%8sn", keypressed);
printf("The NewKeyEvent is: %sn", c);
注意sprintf
中8的限制。这是因为ch
的大小是10,我们需要为'n'
和' '
增加两个位置。
如果您只想从keypressed
字符串中获取一个字符,有两种方法:
-
使用数组索引,这样你可以访问字符串中的任何字符:
char ch = keypressed[x]; // Where `x` is the character number you want
请记住,数组索引从0开始,因此字符串中的第一个字符是数字
0
。 -
如果需要第一个字符,还可以使用解引用操作符
char ch = *keypressed;
相当于
char ch = keypressed[0];