Я использую scanf() некорректно?Что случилось с этим scanf()?
char *input;
scanf("%s", input);
printf("%s\n", input);
Это не удается во время выполнения.
Я использую scanf() некорректно?Что случилось с этим scanf()?
char *input;
scanf("%s", input);
printf("%s\n", input);
Это не удается во время выполнения.
char *input;
Это указатель. Он не указывает на какую-либо память.
#include <stdlib.h>
#include <stdio.h>
int main()
{
//char *input;
char input[128];
memset(input, 0 ,sizeof(input));
scanf("%s", input);
printf("%s\n", input);
return 0;
}
Объявление char *
создает только указатель, оно не выделяет никакой памяти для строки. Вы должны выделить память для ввода. Вы можете сделать это динамически через malloc
(и free
, когда это будет сделано), или вы можете объявить массив статического размера, например char input[100]
.
Как использовать malloc(), если я не знаю размер моей строки заранее? – BlueFlame
Вам нужно принять максимальный размер. Или, если предположение о максимальном размере невозможно, вы можете читать фрагмент по блоку в цикле, например. прочитайте кусок 1000 символов и добавьте его в буфер, затем прочитайте следующий фрагмент из 1000 символов и продолжайте так, пока не дойдете до конца. – taskinoor
Вот почему 'scanf()' небезопасно, по крайней мере, традиционно. Эта [ссылка] (http://stackoverflow.com/questions/1621394/how-to-prevent-scanf-causing-a-buffer-overflow-in-c) обсуждает некоторые способы преодоления этого. – n3rd4n1
заменить char *input;
с char input[1024] = {0};
вы должны обеспечить параметр, который вы передаете Scanf указывает на буфер, который может держать ваш вход
+1. Но, пожалуйста, добавьте подсказку о том, что это переполнение буфера. –