我正试图找出CSV文件的特定列的索引。这就是我所做的:但出于某种原因,它给了我分段的错误。
void indexOfColumn(char *column) {
int columnNumber = 0;
char buff[1024];
char *header = malloc(sizeof(char) * 1024);
//read the first line
fgets(buff, 1024, inFile);
header = strtok(buff, ",");
while(header != NULL || strcmp(header, column) == 0) {
printf("%sn", header);
header = strtok(NULL, ",");
columnNumber++;
}
printf("%dn", columnNumber);
}
我在while循环中打印出了char数组(头(,看起来它正在工作,当它与参数中给定的特定列匹配时,循环停止。但随后分割错误就来了。它不会在循环外打印我正在打印的列编号。
对于初学者来说,此内存分配会产生内存泄漏
char *header = malloc(sizeof(char) * 1024);
因为指针被重新分配给
header = strtok(buff, ",");
while循环的条件必须以以下方式改变
int columnNumber = 0;
while(header != NULL && strcmp(header, column) != 0){
printf("%sn", header);
header = strtok(NULL, ",");
columnNumber++;
}
if ( header == NULL ) columnNumber = -1;
注意C中的索引从0开始。