Как использовать scanf \ fscanf для чтения строки и анализа переменных? - PullRequest
4 голосов
/ 05 марта 2011

Я пытаюсь прочитать текстовый файл, созданный в следующем формате, в каждой строке:

символ *, символ *, Int

т.е:.

ааааа, dfdsd, 23

bbbasdaa, ддд, 100

Я хочу использовать fscanf для чтения строки из файла и автоматического разбора строки в переменные string1, string2, intA

Какой правильный способ сделать это? Спасибо

Ответы [ 2 ]

6 голосов
/ 05 марта 2011

Если у вас есть:

char string1[20];
char string1[20];
int intA;

Вы могли бы сделать:

fscanf(file, "%19[^,],%19[^,],%d\n", string1, string2, &intA);

%[^,] читает строку символов без запятой и останавливается на первой запятой. 19 - максимальное количество символов для чтения (при условии, что размер буфера равен 20), чтобы у вас не было переполнения буфера.

0 голосов
/ 06 марта 2011

Если вы действительно не можете сделать какое-либо безопасное предположение о длине строки, вам следует использовать getline ().Эта функция принимает три аргумента: указатель на строку (char **), указатель на int, содержащий размер этой строки, и указатель файла и возвращает длину прочитанной строки.getline () динамически распределяет пространство для строки (используя malloc / realloc), и, таким образом, вам не нужно знать длину строки и нет переполнений буфера.Конечно, это не так удобно, как fscanf, потому что вам нужно разделить строку вручную.

Пример:

char **line=NULL;
int n=0,len;
FILE *f=fopen("...","r");

if((len=getline(&line,&n,f)>0)
{
...
}

free(line);
fclose(f);
...