我的程序编译,但当我运行它./program -n 3 1000.txt,我得到
分割错误: 11。
什么意思?
我的程序所做的:打印文件的前10行。如果文件少于10行,则应打印整个文件。程序不应创建任何文件。它只是将文件的部分内容打印到标准输出。
还应该可以指定打印不同数目的行。这将通过将字符串-n作为第一个参数传递给程序,作为第二个参数打印的行数和作为第三个参数的文件来指定。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char * argv[]){
int i, n;
char line[1024];
n = atoi(argv[2]);
if(argc == 2){ //eg ./program 1000.txt
FILE * fPointer;
fPointer = fopen("1000.txt", "r");
for(i = 1; i <= 10; i++){
fgets(line, 1024, fPointer);
fprintf(fPointer, "%s\n", line);
}
fclose(fPointer);
} else if(argc == 4){ //eg ./program -n 4 1000.txt
FILE * fPointer;
fPointer = fopen("1000.txt", "r");
for(i = 1; i <= n; i++){
fgets(line, 1024, fPointer);
fprintf(fPointer, "%s\n", line);
}
fclose(fPointer);
} else {
printf("Wrong number of inputs.\n");
}
return 0;
}发布于 2016-05-12 04:28:26
fprintf(fPointer, "%s\n", line)这就是问题所在。您正在将fgets的一行输入到数组中,而不是将其打印到标准输出,而是尝试将其打印到已打开的只读文件中。您只需要使用普通的printf来完成这项工作。
编辑
原来它不是segfaults的原因,但是如果你想让你的程序做你想做的事情,它仍然是一个问题。
检查文件是否真的存在,这可能是@MikeCAT指出的问题。
发布于 2016-05-12 05:14:50
此示例将为参数$ ./a.out -n 3 data.txt打印文件的3行。我将atoint移到条件内,并将打印更改为printf。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
int i, n;
char line[1024];
FILE *fPointer;
if (argc == 2) { //eg ./program 1000.txt
FILE *fPointer;
fPointer = fopen("data.txt", "r");
for (i = 1; i <= 10; i++) {
fgets(line, 1024, fPointer);
printf("%s\n", line);
}
fclose(fPointer);
} else if (argc == 4) { //eg ./program -n 4 1000.txt
n = atoi(argv[2]);
FILE *fPointer;
fPointer = fopen("data.txt", "r");
for (i = 1; i <= n; i++) {
fgets(line, 1024, fPointer);
printf("%s\n", line);
}
fclose(fPointer);
} else {
printf("Wrong number of inputs.\n");
}
return 0;
}文件data.txt
Superman
Batman
Cyclops
Thor
Wolverine
Superman
Batman
Cyclops
Thor
Wolverine
Superman
Batman
Cyclops
Thor
Wolverine
Superman
Batman
Cyclops
Thor
Wolverine输出
$ ./a.out -n 3 data.txt
Superman
Batman
Cyclopshttps://stackoverflow.com/questions/37177218
复制相似问题