【发布时间】:2015-06-24 10:54:20
【问题描述】:
我正在创建一个使用 gtk 和 xlib(xtst) 向应用程序发送假按键的程序,我创建了这个循环来将按键发送到活动窗口:
Display *dis;
dis = XOpenDisplay(NULL);
KeyCode modcode = 0; //init value
int i;
char hello[]="hello world";
char temp[1];
int size=sizeof(hello);
sleep(2);
for (i=0;i<size;i++)
{
temp[0]=hello[i];
temp[1]='\0'; //string terminator
g_print("%s\n",temp); //works fine, whitespace is printed
modcode = XKeysymToKeycode(dis, XStringToKeysym(temp));
XTestFakeKeyEvent(dis, modcode, False, 0);
XFlush(dis);
// sleep(1);
XTestFakeKeyEvent(dis, modcode, True, 0);
XFlush(dis);
XTestFakeKeyEvent(dis, modcode, False, 0);
XFlush(dis);
}
问题是它打印 'helloworld',它无法处理空格或任何特殊字符
谢谢
【问题讨论】:
-
temp[1]='\0'是未定义的行为。temp只有一个单元格,temp[0]。您拥有越界访问权限。 -
我已将数组大小增加到 2,仍然得到相同的结果 :(