分段故障问题

时间:2015-05-12 05:47:28

标签: c++ segmentation-fault

我正在尝试使用xdotool发出system()命令来移动鼠标。

以下是我的测试程序:

int main() {

    int x = 10;
    int y = 50;

    char* str;

    sprintf(str, "xdotool mousemove %d, %d", x, y);
    system(str);
}

我收到了分段错误(核心转储)错误。有没有一种方法可以让这样的命令工作?顺便提一下,我已经尝试过root了。我是c ++的新手,我们将非常感谢您的帮助。

2 个答案:

答案 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