Запись в массив из строки
Каким образом можно записать разделенную строчку в двумерный массив, я что-то так и не додумал.
void processing()
{
FILE *file = fopen(FNAME, "r");
if (file == NULL)
{
perror("Ошибка при открытии исходного файла");
return EXIT_FAILURE;
}
size_t counter = 0;
int ch, pre = EOF;
while ((ch = fgetc(file)) != EOF)
{
pre = ch;
if (ch == '\n')
++counter;
}
if (pre == EOF)
{
}
else if (pre != '\n')
{
++counter;
}
char tableInfo[counter][2];
int i = 0, j = 0;
char neObrabotInfo[256];
char sep[10] = ":";
char *istr;
file = fopen("BookContact.txt", "r");
if (file == NULL)
{
perror("Ошибка при открытии исходного файла");
return EXIT_FAILURE;
}
printf("\n\nFile opened successfully\n\n");
while (fgets(neObrabotInfo, 256, file))
{
istr = strtok(neObrabotInfo, sep);
while (istr != NULL)
{
printf("%s\n", istr);
istr = strtok(NULL, sep);
tableInfo[0][0] = istr;
}
}
for (i = 0; i < counter; ++i)
{
for (j = 0; j < 3; ++j)
{
printf("%d",tableInfo[i][j]);
printf("\n");
}
}
return 0;
fclose(file);
}
Не получается запихнуть разобранную строку в массив
Строки которые разбираются, пропуская ":"

Как это можно записать в двумерный массив чтоб массив выглядел так:

Ответы (1 шт):
Автор решения: t3f
→ Ссылка
Чтобы записывать в массив tableInfo строки, его элементы должны иметь тип char*, а не просто char:
char * tableInfo[counter][3];
Так как буфер (в котором хранятся строки) перезаписывается на каждой итерации, для сохранения строк нужно выделять новую память и копировать их туда, а указатели на эти копии уже сохранять в tableInfo. Например так:
for (i = 0; fgets(neObrabotInfo, 256, file); i++) {
istr = strtok(neObrabotInfo, sep);
for (j = 0; istr != NULL; j++) {
tableInfo[i][j] = malloc(strlen(istr) + 1);
strcpy(tableInfo[i][j], istr);
istr = strtok(NULL, sep);
}
}
