Я пытаюсь получить выражение от пользователя и поместить его в динамически создаваемую строку. Вот код:Динамически созданная строка C
char *get_exp() {
char *exp, *tmp = NULL;
size_t size = 0;
char c;
scanf("%c", &c);
while (c != EOF && c != '\n') {
tmp = realloc(exp, ++size * sizeof char);
if (tmp == NULL)
return NULL;
exp = tmp;
exp[size-1] = c;
scanf("%c", &c);
}
tmp = realloc(exp, size+1 * sizeof char);
size++;
exp = tmp;
exp[size] = '\0';
return exp;
}
Однако первый считанный символ является символом новой строки символ каждый раз, когда по какой-то причине, так что выходит из цикла. Я использую XCode, может быть, это и есть причина проблемы?
Проверено на Ubuntu/ССАГПЗ - не проблема, если ехр инициализируется NULL (или это будет крах) , Вы пробовали самый простой тест - просто главный() + вызов get_exp()? И как вы это называете, в командной строке в XCode? – Michael
В отличие от 'c = getc()', 'scanf ("% c ", & c)' никогда не может привести к значению 'EOF'. Поэтому тестирование для 'EOF' не нужно. – glglgl
Обратите внимание, что стандартные функции ввода-вывода буферизируются в строке и не возвращают ничего, пока вы не нажмете enter. В этом нет стандартного способа, это зависит от ОС, и я не знаю, как это сделать в MacOS. Другое дело, в таком случае вы можете избежать дублирования кода с помощью 'for (;;) {something ...; if (endcondition) break; Нечто большее...; } '. – hyde