C - 系统函数总是返回-1

时间:2016-01-09 12:19:12

标签: c

每当我使用system()函数编写c中最简单的程序时,它返回-1。 例如:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    printf("%d", system("pause"));
    return 0;
}

我使用了多个编译器来确保它不能仅使用gcc。 它发生在每个cmd命令中。 当我在cmd中键入命令时,它们工作正常。 该程序只是跳过每个system()函数调用。 附:我正在使用Windows 8.1和GNU编译器(gcc)。

有谁知道我该怎么办?

3 个答案:

答案 0 :(得分:3)

当某些库函数出错时,请尝试检查它是什么确切的错误。阅读文档(MSDNman page,等等)是一个非常好的主意。 C标准库函数通常设置全局errno变量,并且有将代码转换为字符串的函数。所以尝试这样的事情:

#include <stdio.h>
#include <stdlib.h>

#include <errno.h>
#include <string.h>

int main()
{
    int result = system("pause");
    // note: have to use temp variable for return value,
    // because function argument evaluation order is not defined in C
    printf("system return value %d errno %d = %s\n", result, errno, strerror(errno));
    // note, printf may set errno too, so it may have different value after above call
    return 0;
}

当我将上述程序复制粘贴到 foo.c 时,启动&#34; Qt 5.5 for Desktop(MinGW 4.9.2 32 bit)&#34; 由Qt SDK安装,它的工作方式如下(从控制台窗口稍微缩短/消毒了一些副本):

C:\Users\hyde\foo>dir
 Directory of C:\Users\hyde\foo
10.01.2016  10:25               443 foo.c

C:\Users\hyde\foo>mingw32-make foo
g++     foo.c   -o foo

C:\Users\hyde\foo>dir
 Directory of C:\Users\hyde\foo
10.01.2016  10:25               443 foo.c
10.01.2016  10:28            47 445 foo.exe

C:\Users\hyde\foo>foo
Press any key to continue . . .
system return value 0 errno 0 = No error

C:\Users\hyde\foo>

答案 1 :(得分:1)

这段代码(带有“ls”而不是“pause”)在Ubuntu中运行正常。我认为这取决于您的系统政策。

答案 2 :(得分:0)

尝试右键单击exe并选择其他兼容模式之一。你的程序适合我(Windows 7 Pro),所以我可能会先尝试一下。