我想在.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;
}
答案 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++;
}