我目前正在尝试读取15,000个整数的输入文件,并将这些值传递给数组。在将命令行参数传递给程序时,我真的很生气,所以也许我不是这样做的正确方法。这是我到目前为止编码的内容:
#include <stdio.h>
int main(int argc, char *argv[]) {
int i;
FILE *fp;
int c;
int values[15000];
char line[32];
int index = 0;
for (i = 1; i < argc; i++) {
fp = fopen(argv[i], "r");
if (fp == NULL) {
printf(stderr, "cat: can't open %s\n", argv[i]);
continue;
}
while (fgets(line, sizeof(line), fp) != NULL) {
scanf(line, "%d", values[index];
index++;
}
fclose(fp);
}
return 0;
}
我从命令行调用gcc -o prob_5 input.txt并收到此错误消息:
/usr/bin/ld:input.txt: file format not recognized; treating as linker script
/usr/bin/ld:input.txt: syntax error
collect2: ld returned 1 exit status
我的代码或命令行参数是否有错误,或两者都有错误?
答案 0 :(得分:3)
尝试
gcc -o prob5 prob5.c
./prob5 input.txt
假设源文件(显示为......)名为prob5.c - 您不必提及:)
#include <stdio.h>
int main(int argc, char *argv[])
{
int i;
FILE *fp;
int values[15000];
char line[32];
int index = 0;
for (i = 1; i < argc; i++)
{
fp = fopen(argv[i], "r");
if (fp == NULL)
{
fprintf(stderr, "cat: can't open %s\n", argv[i]);
continue;
}
while (fgets(line, sizeof(line), fp) != NULL && (index < 15000))
{
sscanf(line, "%d", &values[index]);
index++;
}
fclose(fp);
}
return 0;
}
答案 1 :(得分:1)
问题是你的执行。 gcc
是一个编译器/链接器,您不应该传入输入文件:
gcc -o prob_5 prob_5.c
./prob_5 input.txt
答案 2 :(得分:1)
您需要编译源代码
gcc prob_5.c -o prob_5
然后使用命令行参数运行二进制文件
./prob_5 input.txt
你正在做的事情是编译器试图将一堆数字解释为源代码。