c语言 - 尝试运行已编译的程序时出错"Too few arguments"



我正在尝试编写代码以刷新记忆,为课程做准备。

int main(){
  int x;
  for( x = 0;x < 10; x++){
    printf("Hello worldn");
  }
  return 0;
}

但当我试着运行这个时,我得到了Too few arguments

我使用gcc -o repeat file.c编译了上面的代码。然后要运行这个代码,我只需键入repeat

很抱歉,如果这是一个愚蠢的问题,我已经有一段时间没有上介绍课了。

当您键入时

filename

在提示下,操作系统将搜索路径。默认情况下,Linux不会在路径中包含当前目录,因此您最终会运行类似/bin/filename的程序,它会抱怨,因为它需要参数。要了解您实际运行的文件,请尝试

which filename

要运行在工作目录中创建的filename文件gcc,请使用

./filename

您的代码编译良好。尝试:

gcc -o helloworld file.c
./helloworld

更新:

根据最近的评论,问题是可执行文件名为repeat,并且您使用的是csh或tcsh,所以repeat是一个内置命令。

键入./repeat而不是repeat

在提问时,不要遗漏这样的细节;复制并粘贴您的源代码、键入的任何命令以及收到的任何消息。


可执行文件名为file,也是一个命令。

要运行您自己的程序,请键入

./file

编辑:

以上是一个有根据的猜测,基于以下假设:

  • 实际的编译命令是gcc file.c -o filegcc -o file file.c;以及
  • 如果您在没有参数的情况下调用预定义的file命令(供参考的man file),它将生成该错误消息

问题最初说编译命令是gcc file.c;现在它说CCD_ 16。(如果在没有参数的情况下运行file命令,则会打印不同的错误消息)。

正确的方法是:

gcc file.c -o filename && ./filename

(我通常会调用可执行文件file来匹配源文件的名称,但你可以用任何一种方式。)

如果成功,gcc命令将在当前目录中为您提供一个名为filename的可执行文件。&&表示,只有在第一个命令成功的情况下才执行第二个命令(如果程序没有编译,则尝试运行程序毫无意义)。./filename明确表示运行当前目录中的filename可执行文件(.);否则它会在你的$PATH中搜索。

如果您收到错误消息Too few arguments,则说明它不是来自您的程序;除非有什么东西明确地打印出来,否则您将看不到该消息。解释一定是你在运行其他程序。也许您的系统中已经有一个名为filename的命令。

所以试着这样做:

gcc file.c -o filename && ./filename

看看会发生什么;它应该运行您的程序。如果有效,试着只键入

filename

看看这有什么用。如果没有运行您的程序,请键入

type -a filename

which filename

看看你实际在执行什么。

为了避免这种情况,养成使用./whatever在当前目录中执行程序的习惯。

最新更新