2015-11-15 2 views
0
#include <stdio.h> 

void main() 
{ 
    char *p; 
    gets(p); 
    puts(p); 
} 

Когда я запускаю код это происходит enter image description hereВведите строку в указатель с помощью получает()

+1

Вам нужно передать указатель, указывающий на буфер памяти. Как бы то ни было, 'p' не инициализируется. – kaylum

+0

C не подходит для обучения проб и ошибок ... учитесь у книги. [Вот несколько рекомендаций] (http://stackoverflow.com/questions/562303/the-definitive-c-book-guide-and-list) –

ответ

-3

Указатель *p не обеспечивает хранение. Вам нужно будет предоставить то, что на самом деле имеет память. Например:

#include <stdio.h> 

void main() 
{ 
    char p[1024]; 
    gets(p); 
    puts(p); 
} 

Обратите внимание, что если вы введете более 1024 символов, это снова вызовет проблемы.

+3

Хотя ваше предложение почти правильно (1024 символа вызовет UB, 1023 не будет), пожалуйста, предоставьте более подробный ответ, включающий функцию 'fgets', а не фиктивную функцию' gets'. Это было окончательно удалено из последней версии стандарта C по уважительной причине! – chqrlie

+0

Кроме того, 'void main()' неверен, он найден в старых книгах, предварительно стандартных c AFAIK. –

+1

Извините, но вы можете использовать 'gets' для вас, чтобы вы могли использовать' gets'. – szczurcio

1

Похоже, вы изучаете из-за неправильного источника, в том смысле, что код, который вы опубликовали, давно преподавался, и его больше нет. Потому что у него много проблем, и он использует нестандартную форму функции main(), которая использовалась до .

Также вы пытаетесь написать указатель, который не указывает нигде.

Хорошая версия вашей программы будет

int main(void) 
{ 

    char p[1024]; 
    if (fgets(p, sizeof(p), stdin) == NULL) 
     return -1; 
    puts(p); 
    return 0; 
} 
+0

Даже не уверен, стоит ли указывать, но преподается время обучения, а не учиться;) – szczurcio

+0

Это, вы знаете! Испанский - мой родной язык. –

+0

Да, ваш профиль гласит, что. Я имел в виду: это не делает ваш ответ менее полезным, но в то же время, может быть, я должен сообщить вам, чтобы вы (и другие, кто читал это в будущем) не повторили эту ошибку. Это обсуждение для Meta SO, хотя ... – szczurcio

0

Вы должны объявить, сколько памяти требуется для этого указателя. , например, когда вы набираете это: * p = «Hello world», он автоматически объявляет, сколько памяти используется для этого. Так что, если и по-прежнему хотят использовать указатель для этой программы, то вы должны использовать таНос функцию:

#include<stdio.h> 

int main() 
{ 
    char* p; 
    p=malloc(100); 

    printf("Enter some text:"); 
    gets(p); 
    printf("\nYou have typed: %s\n",p); 

    return 0; 
} 

Здесь таНос (100); означает, что для хранения этой строки требуется 100-битная память.

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