#include <stdio.h>
void main()
{
char *p;
gets(p);
puts(p);
}
Когда я запускаю код это происходит Введите строку в указатель с помощью получает()
#include <stdio.h>
void main()
{
char *p;
gets(p);
puts(p);
}
Когда я запускаю код это происходит Введите строку в указатель с помощью получает()
Указатель *p
не обеспечивает хранение. Вам нужно будет предоставить то, что на самом деле имеет память. Например:
#include <stdio.h>
void main()
{
char p[1024];
gets(p);
puts(p);
}
Обратите внимание, что если вы введете более 1024 символов, это снова вызовет проблемы.
Хотя ваше предложение почти правильно (1024 символа вызовет UB, 1023 не будет), пожалуйста, предоставьте более подробный ответ, включающий функцию 'fgets', а не фиктивную функцию' gets'. Это было окончательно удалено из последней версии стандарта C по уважительной причине! – chqrlie
Кроме того, 'void main()' неверен, он найден в старых книгах, предварительно стандартных c AFAIK. –
Извините, но вы можете использовать 'gets' для вас, чтобы вы могли использовать' gets'. – szczurcio
Похоже, вы изучаете c из-за неправильного источника, в том смысле, что код, который вы опубликовали, давно преподавался, и его больше нет. Потому что у него много проблем, и он использует нестандартную форму функции main()
, которая использовалась до c89.
Также вы пытаетесь написать указатель, который не указывает нигде.
Хорошая версия вашей программы будет
int main(void)
{
char p[1024];
if (fgets(p, sizeof(p), stdin) == NULL)
return -1;
puts(p);
return 0;
}
Даже не уверен, стоит ли указывать, но преподается время обучения, а не учиться;) – szczurcio
Это, вы знаете! Испанский - мой родной язык. –
Да, ваш профиль гласит, что. Я имел в виду: это не делает ваш ответ менее полезным, но в то же время, может быть, я должен сообщить вам, чтобы вы (и другие, кто читал это в будущем) не повторили эту ошибку. Это обсуждение для Meta SO, хотя ... – szczurcio
Вы должны объявить, сколько памяти требуется для этого указателя. , например, когда вы набираете это: * 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-битная память.
Вам нужно передать указатель, указывающий на буфер памяти. Как бы то ни было, 'p' не инициализируется. – kaylum
C не подходит для обучения проб и ошибок ... учитесь у книги. [Вот несколько рекомендаций] (http://stackoverflow.com/questions/562303/the-definitive-c-book-guide-and-list) –