保存令牌错误:核心转储

时间:2017-06-17 03:50:00

标签: c string segmentation-fault token

我在C中编写了这段代码来保存一串值的一些字段,以便我可以再次调用它们进行格式化输出,但是在第一个字段被执行后代码接缝失败 - 分段错误(核心转储) 。 我确保在使用后释放已分配的内存,但它不起作用。

href="

同样,只有一行中的第一个字段似乎工作正常。 这是使用的示例文件:

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

const char* getfield(char* line, int num)
{
    const char* tok;
    for (tok = strtok(line, ";");
            tok && *tok;
            tok = strtok(NULL, ";\n"))
    {
        if (!--num)
            return tok;
    }
    return NULL;
}

int main(int argc, char **argv)
{
    FILE* stream = fopen(argv[1], "r");

    char line[1024];
    while (fgets(line, 1024, stream))
    {
        char* tmp = strdup(line);
        char* save1 = malloc(sizeof(char)*51);
        strcpy(save1, getfield(tmp, 1));
        printf("Save1 = %s\n", save1);
        strcpy(save1, getfield(tmp, 2));
        printf("Save2 = %s\n", save2);
        free(save2);
        char* save2 = malloc(sizeof(char)*51);
        strcpy(save2, getfield(tmp, 2));
        printf("Save2 = %s\n", save2);
        free(save2);
        char* save3 = malloc(sizeof(char)*51);
        strcpy(save3, getfield(tmp, 3));
        printf("Save3 = %s\n", save3);
        free(save3);
        char* save4 = malloc(sizeof(char)*51);
        strcpy(save4, getfield(tmp, 4));
        printf("Save4 = %s\n", save4);
        free(save4);
        char* save5 = malloc(sizeof(char)*51);
        strcpy(save5, getfield(tmp, 5));
        printf("Save5 = %s\n", save5);
        free(save5);

        free(tmp);
    }
}

我的输出看起来像这样

1;Matt;LeBlanc;Friends;1994         
2;Matthew;Perry;Friends;1994
3;Michael;Hall;Dexter;2006
4;Judy;Greer;Archer;2009
5;Justin;Roiland;RickAndMorty;2013

但是如果我修改代码以便只使用save1那么输出就是这个

Save1 = 0
Segmentation fault (core dumped)

0 个答案:

没有答案