我正在尝试使用xdotool发出system()
命令来移动鼠标。
以下是我的测试程序:
int main() {
int x = 10;
int y = 50;
char* str;
sprintf(str, "xdotool mousemove %d, %d", x, y);
system(str);
}
我收到了分段错误(核心转储)错误。有没有一种方法可以让这样的命令工作?顺便提一下,我已经尝试过root了。我是c ++的新手,我们将非常感谢您的帮助。
答案 0 :(得分:4)
其他答案是正确的,但是你可以在c ++中使用更好的方法,而不是使用sprintf
int main() {
int x = 10;
int y = 50;
std::stringstream ss;
ss << "xdotool mousemove " << x << " " << y;
system(ss.str().c_str());
}
答案 1 :(得分:1)
您的问题是您没有指定任何空间来打印字符串。
例如,您可能希望执行以下操作:
int main() {
int x = 10;
int y = 50;
/* this assigns 255 characters of space for the string on the stack */
char str[255];
/* char* str -- this assigns no space, it just defines a pointer */
/* this function will put the format string with arguments into the
* space you provide... It will not provide it's own space. */
sprintf(str, "xdotool mousemove %d, %d", x, y);
system(str);
}
这将消除您的seg错误,因为您不再访问未分配的内存。
如果您不知道函数的工作原理,请考虑使用The c++ reference guide。