拆分我从文件中读取的字符串

Mr.*_*. X 1 c arrays file

我有这样的文件

GET /index.html k
GET /docencia.html k
GET /ejemplo.html k
Run Code Online (Sandbox Code Playgroud)

我想逐行阅读它并用这个分隔符将它拆分" "但是却给了我这个错误:segmentation fault(core dumped)我不知道该尝试什么.

这是我的代码:

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

int main(int argc, char *argv[]) {
    char ordenes[150];
    char *orden[3];
    char *token;
    int tok;

    FILE *fp;
    fp = fopen(argv[1], "r");
    if (fp == NULL) {
        printf("File error");
        exit(1);
    }

    while (feof(fp) == 0) {
        fgets(ordenes, sizeof(ordenes), fp);
        printf("%s \n", ordenes);
        token = strtok(ordenes, " ");
        tok = 0;
        while (token != NULL) {
            orden[tok] = strdup(token);
            tok++;
            token = strtok(NULL, " ");
        }

        printf("\n%s\n", orden[0]);
        printf("\n%s\n", orden[1]);
        printf("\n%s\n", orden[2]);
    }
    fclose(fp);
}
Run Code Online (Sandbox Code Playgroud)

我第一次打电话时出现错误strdup.如果我在第一次调用之后尝试打印令牌strtok,它也会失败(相同segmentation fault core dumped),所以我猜问题就在于strtok.

ali*_*oar 5

你没有包含<string.h>,所以编译器在strtok的签名上应用默认参数提升,特别是它认为strtok返回一个int.

因此,编译器将采用胁迫的运营商从intpointer to char在分配

token = strtok(ordenes, " ");
Run Code Online (Sandbox Code Playgroud)

并且此作业将编译为

token = (int->char*) strtok(ordenes, " ");
Run Code Online (Sandbox Code Playgroud)