strlen-код не работает

Работаю над этим небольшим фрагментом кода, но он почему-то все время падает.

Кто-нибудь понял, что я делаю неправильно

char *str;
printf("Enter a string\n");
gets(str);
printf("The size of the string is %d", strlen(str));
system("PAUSE");    
return 0;

person danielrieske    schedule 13.05.2014    source источник
comment
@Lafexlos Хотя удаление тега из заголовка является полезным редактированием, я считаю его слишком незначительным   -  person yizzlez    schedule 14.05.2014


Ответы (2)


Вы не выделили памяти для str. Объявите буфер, например char str[50], но помните о переполнении буфера.

person mrks    schedule 13.05.2014
comment
@user3206159 user3206159 Поскольку этот ответ помог вам, вы можете принять его, щелкнув маленькую галочку рядом с ним. Это даст вам и mdsl несколько очков репутации и пометит ваш вопрос как решенный. Это не обязательно, но настоятельно рекомендуется. - person cf stands with Monica; 14.05.2014

Вы только создали указатель char*, который указывает на случайное место в памяти, и вы пытаетесь что-то с ним сделать - и поэтому ваша программа падает.

Вы должны создать массив символов:

char str[50];

или динамически выделять память для строки с помощью malloc:

char* str;
str = (char *)malloc(50*sizeof(char)); // allocate memory
// some operations
free(str);                      // deallocate memory

где 50 - ваш предполагаемый размер буфера.

person elwin013    schedule 13.05.2014
comment
Следует всегда проверять возвращаемое значение вызова malloc. Лично я всегда пишу простое if для этого: if ((str = (char *)malloc(50 * sizeof(char))) == NULL) { fprintf(stderr, "Malloc error\n"); exit(1); } - person PLPeeters; 14.05.2014