2012-04-18 5 views
0

Я делаю программу списка продуктов и хочу включить строку ввода пользователя, которая помещается в следующую доступную строку в текстовом файле. Прямо сейчас это добавляет строку в файл, но затем помещает случайные символы для нескольких пробелов, а затем, если я ввожу что-то еще, это не будет на следующей строке.Добавление строк в текстовый файл в C

void AddToFile(FILE *a) { 
    char addItem[20]; 
    printf("Enter item: "); 
    scanf("%s", &addItem); 
    fwrite(addItem, sizeof(addItem), 1, a); 
} 
+0

сделайте это вместе с другими вопросами. – Jack

ответ

6

эта линия должна быть:

// strlen instead of sizeof 
    fwrite(addItem, strlen(addItem), sizeof(char), a); 

Ваш код всегда пишет 20 символов, а реальное количество символов, что строка имеет.

3

Помимо поправки, указанной в pivotnig, fwrite() не записывает в файл новый символ строки. Либо напишите новую строку после fwrite(), либо добавьте ее в буфер addItem до fwrite().

Вы должны предотвратить переполнение буфера, ограничивая количество символов копируется в buf:

scanf("%19s", addItem); 
1

В данном примере, если вы будете пытаться написать элемент с более чем 20 символов, которые вы получите в неприятности, как scanf перезапишет нераспределенную память. Немного улучшенная версия будет:

scanf("%19s",&addItem); 

Таким образом, по крайней мере, вы не будете перезаписывать случайную память.

Редактировать: Спасибо Джеку за указание \ 0 тоже нужно написать.

+1

Вы должны зарезервировать одно место в 'addItem' для 0-терминатора,' \ 0'. – Jack

Смежные вопросы