Intereting Posts

Ошибка сегментации с помощью scanf и строк в C

Я начинаю с c, и у меня проблема с scanf и строками.

вот пример, который я написал о своей проблеме.

#include  #include  int main(void) { char* string; scanf("%s", &string); if (strcmp(string, "Foo") == 0) //segmentation fault here printf("Bar"); } 

в основном, этот код компилируется, но когда я его запускаю, я получаю ошибку сегментации в strcmp ()

если я заменю «строку» в этой строке на «& string», она работает, но я получаю эту ошибку от компилятора

 /usr/include/stdio.h:362:12: note: expected 'const char * __restrict__' but argument is of type 'char **' 

что заставляет меня думать, что это решение на самом деле не идеально.

также Если я объявляю строку следующим образом:

 char string[100]; 

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

Есть ли лучшее решение, которое я здесь отсутствует, или это мои единственные варианты?

благодарю вас.

 char* string; scanf("%s", &string); 

string не указывает на какое-либо действительное место в памяти. Выделите память, используя malloc в массив символов и скопируйте ввод. Убедитесь, что выделенная память имеет место для символа нулевого завершения. Не забудьте free память, чтобы избежать утечек.

Просто попробуйте этот код

  #include  #include  #include  int main(void) { char* string; string=(char *)malloc(3); /*allocate the memory to string cahr pointer(default pointer point to single byte and if you print pointer variable don't used & character)*/ scanf("%s", string); if (strcmp(string, "Foo") == 0) printf("Bar\n"); } 

При объявлении char *. он не будет иметь места в памяти. поэтому перед использованием этой переменной вы должны выделить ячейку памяти. char * p; p = malloc (sieof (char) * размер строки);

то вы используете функцию scanf (). он будет работать должным образом.

когда мы обращаемся к неизвестной памяти (т.е. нераспределенной памяти). то это произойдет через ошибку сегментации