【问题标题】:C file not reading properlyC 文件无法正确读取
【发布时间】:2014-04-15 18:21:51
【问题描述】:

当我在命令终端中运行以下命令时:gcc practice.c temp.txt

我收到以下错误:

/usr/local/binutils/2.21/bin/ld:temp.txt: file format not recognized; treating as linker script
/usr/local/binutils/2.21/bin/ld:temp.txt:1: syntax error
collect2: ld returned 1 exit status

这是我的 C 代码:

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

#define MAX_LEN 1024

int main(int argc, char **argv) {
  FILE *file;
  char line[MAX_LEN];
  float value = 0;

  file = fopen(argv[1], "r");

  while (fgets(line, MAX_LEN, file) != NULL) {
    sscanf(line, "%f", &value);
    printf("%f\n", value);
  }

  fclose(file);

  return 0;
}

基本上我正在尝试读取文件中的数字并将它们打印出来。很简单。

例如,temp.txt 就是这样的:

10 26 27 52 242

(这些数字应该在一列中)

等等。

【问题讨论】:

  • 错误信息告诉你到底是什么问题...

标签: c text io stream


【解决方案1】:

您可能需要一些关于 gcc 的真正含义的解释,gcc 用于将您的代码转换为可运行的程序,它是一种将代码转换为计算机可执行指令的转换器。

你不需要编译文本文件,你首先需要编译你的程序:

gcc practise.c -o your_binary_name

然后在参数中使用您的文件启动它:

./your_binary_name temp.txt

【讨论】:

    【解决方案2】:

    使用 gcc 编译可执行文件,然后在输入文件上运行可执行文件。你得到一个错误 b/c gcc is trying to compile your test.txt as C source code。

    所以:

    gcc practice.c -o practice
    ./practice test.txt
    

    【讨论】:

    • 感谢您的回答。但是 ./ 符号有什么作用呢?
    • 我假设您所在的目录不是您的 PATH env 变量的一部分。 ./exename 表示法表示运行在当前目录中找到的名为 exename 的可执行文件。如果你不这样做,如果'。不在您的PATH 中,那么类 Unix 操作系统将找不到运行它的可执行文件。
    • ./practice 表示法表示运行位于当前目录中的文件practice 中的代码,该目录通常不在您的PATH 上。
    • 啊,我明白了,谢谢。我发现我可以通过练习 test.txt 来运行它
    • ./ 是路径符号。这 ”。”表示当前目录,“/”用于将该目录名与后面的其他目录或文件隔开。使用此命令,您要求您的计算机运行位于当前文件夹中的“练习”程序。
    【解决方案3】:

    C 是一种编译 而非解释 语言。例如,GCC 不会像 Python 或其他 脚本语言 那样运行代码。 GCC 宁愿将 C 源代码转换为本机机器代码,当 链接 到目标运行时以创建 可执行文件 然后由操作系统单独直接加载和执行,无需支持完全来自 GCC。

    【讨论】:

      猜你喜欢
      • 2019-03-30
      • 1970-01-01
      • 2021-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-24
      • 2020-03-11
      相关资源
      最近更新 更多