C读取文件&切成二维字符串数组

时间:2017-03-29 14:33:01

标签: c

我想在.dat文件中读取并将这些信息切割成2个数组: pList是产品列表 eqList是设备清单

,文件格式如下:

productName equipment_a equipment_b
productName equipment_c equipment_d equipment_e
productName equipment_b equipment_d equipment_f
productName equipment_c
productName equipment_a equipment_f

有什么问题?

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

#define lineLength 2048

int main()
{
    int a=0,b=0,c=0;
    char fileBuf[100], *pList[100], *eqList[100][100], *tempStr, delimilator[2] = " ";

    while ( fgets(fileBuf,lineLength,stdin) != NULL){
        tempStr = strtok(fileBuf,delimilator);
        pList[a] = malloc( strlen(tempStr) + 1);
        strcpy(pList[a], tempStr);

        for(b=0;tempStr != NULL;b++){
            tempStr = strtok(NULL,delimilator);
            eqList[a][b] = malloc( strlen(tempStr) + 1); //problem here
            strcpy(eqList[a][b], tempStr);               //problem here
        }
        a++;
    }

    return 0;
}

1 个答案:

答案 0 :(得分:1)

您之前使用strok返回的值来检查它是否为!= NULL。在最后一次迭代中,它将调用Undefined Behavior

你的循环可能就像

while (fgets(fileBuf, sizeof(fileBuf), stdin) != NULL)
{
    tempStr = strtok(fileBuf,delimilator);
    pList[a] = malloc( strlen(tempStr) + 1);
    strcpy(pList[a], tempStr);

    tempStr = strtok(NULL,delimilator);

    b=0;

    while (tempStr != NULL)
    {
        eqList[a][b] = malloc( strlen(tempStr) + 1);
        strcpy(eqList[a][b], tempStr);  

        tempStr = strtok(NULL,delimilator);

        b++;
    }

    a++;
}