Я пытаюсь разобрать файл csv и сохранить эти значения в 2d VLA. Первый кодовый блок показывает два вызова функции TokenizeLine, которая очень просто использует strtok, чтобы разбить строку на части и присвоить токен соответствующей ячейке в массиве. Второй блок представляет собой рассматриваемую функцию.
//Get first line of file then iterate through lines until
//beginning comments are passed over
fgets(currentLineStr, 8192, fileIn);
while (currentLineStr[0] == '#')
fgets(currentLineStr, 8192, fileIn);
//Start adding values to array. current line held by currentLineStr
//is assigned first
TokenizeLine(currentLineStr, eTable, yIndex, x, y);
yIndex++;
while(fgets(currentLineStr, 8192, fileIn) != NULL)
{
TokenizeLine(currentLineStr, eTable, yIndex, x, y);
yIndex++;
}
В следующей функции я получаю segfault при назначении указателя токена указателю, содержащемуся в структуре eTable.
void TokenizeLine(int x; int y; char currentLineStr[], Entry eTable[x][y], int yIndex, int x, int y)
{
char *tokPtr;
int xIndex = 0;
tokPtr = strtok(currentLineStr, "|");
*** eTable[xIndex][yIndex].str = tokPtr;*** (error happening here)
while(tokPtr != NULL)
{
tokPtr = strtok(NULL, "|");
eTable[xIndex][yIndex].str = tokPtr;
//printf("%s\n", eTable[xIndex][yIndex].str);
xIndex++;
}
}
Застрял на этом какое-то время, любой / весь вклад ценится и поощряется.
Entry
? Как определяетсяeTable
? Я надеюсь, вы знаете, чтоstrtok
использует статическую переменную внутри, поэтому каждый раз, когда вы вызываете strtok, предыдущее возвращаемое значение исчезает. - person Koshinae   schedule 06.07.2015