首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >分割故障11?

分割故障11?
EN

Stack Overflow用户
提问于 2016-05-12 04:20:39
回答 2查看 1.2K关注 0票数 0

我的程序编译,但当我运行它./program -n 3 1000.txt,我得到

分割错误: 11。

什么意思?

我的程序所做的:打印文件的前10行。如果文件少于10行,则应打印整个文件。程序不应创建任何文件。它只是将文件的部分内容打印到标准输出。

还应该可以指定打印不同数目的行。这将通过将字符串-n作为第一个参数传递给程序,作为第二个参数打印的行数和作为第三个参数的文件来指定。

代码语言:javascript
运行
复制
#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;

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-12 04:28:26

代码语言:javascript
运行
复制
fprintf(fPointer, "%s\n", line)

这就是问题所在。您正在将fgets的一行输入到数组中,而不是将其打印到标准输出,而是尝试将其打印到已打开的只读文件中。您只需要使用普通的printf来完成这项工作。

编辑

原来它不是segfaults的原因,但是如果你想让你的程序做你想做的事情,它仍然是一个问题。

检查文件是否真的存在,这可能是@MikeCAT指出的问题。

票数 3
EN

Stack Overflow用户

发布于 2016-05-12 05:14:50

此示例将为参数$ ./a.out -n 3 data.txt打印文件的3行。我将atoint移到条件内,并将打印更改为printf

代码语言:javascript
运行
复制
#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

代码语言:javascript
运行
复制
Superman
Batman
Cyclops
Thor
Wolverine
Superman
Batman
Cyclops
Thor
Wolverine
Superman
Batman
Cyclops
Thor
Wolverine
Superman
Batman
Cyclops
Thor
Wolverine

输出

代码语言:javascript
运行
复制
$ ./a.out -n 3 data.txt
Superman

Batman

Cyclops
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37177218

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档