используя getchar () в c, получая ошибку сегментации (дамп памяти) - PullRequest
1 голос
/ 04 февраля 2012

Я пишу программу, которая требует от меня ввода серии символов, которые загружаются в массив символов для последующего использования.Код, который я пытаюсь заставить работать, выглядит следующим образом:

char temp = getchar();
while(temp != '\n'){//input char into temp until '\n'
    input[strlen(input)] = temp;//adds temp to end of input
    temp = getchar();
}

, но когда я добираюсь до этой строки в программе, я получаю «Ошибка сегментации (ядро сброшено)» и вылетает. Когда я заменяю \n с другим символом, например%

char temp = getchar();
while(temp != '%'){//input char into temp until '\n'
    input[strlen(input)] = temp;//adds temp to end of input
    temp = getchar();
}

, тогда он работает нормально, но я хочу использовать символ новой строки, а не%.Я посмотрел несколько уроков, и они сказали, что это как вводить, пока не нажмете Enter, поэтому я не уверен, в чем проблема.Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 04 февраля 2012

Проблема здесь:

input[strlen(input)] = temp;

Это может легко привести к переполнению буфера, потому что нет никакой гарантии, что следующим символом будет '\ 0' для обозначения конца строки. Вам нужно добавить проверку границ для конца ввода - в нем только столько места, и вам нужно сделать следующий символ после temp '\ 0';

Также, как предположил Том, вам определенно следует использовать fgets. ( РЕДАКТИРОВАТЬ: извините, я прочитал и напечатал получает, но я тоже думал fgets)

2 голосов
/ 04 февраля 2012

Вы можете использовать это:

while ((temp = getchar ())! = EOF && temp! = '\ N')

1 голос
/ 04 февраля 2012

Вы можете использовать fgets, если все, что вы хотите сделать, это прочитать \n. Вот страница на ней.

Вы не должны использовать gets.

...