Что не так с этим C (strcpy) кодом? - PullRequest
0 голосов
/ 13 марта 2012
int main() {
   char *w;
   strcpy(w, "Hello Word");
   printf("%s\n", w);
   return 0;
}

Что плохого в том, как указатель на символ используется в приведенном выше коде?

Ответы [ 4 ]

4 голосов
/ 13 марта 2012

Вы не выделяете место для строки.w - это просто указатель на некоторую память (значение мусора, поскольку оно не инициализировано).

char w[32];

или

char *w = malloc(32);

Вам необходимо выделить место для символов.

3 голосов
/ 13 марта 2012

Это неинициализированный указатель. Strcpy запишет в неизвестное место в памяти

3 голосов
/ 13 марта 2012

Нет выделенной памяти.

Добавить

w = (char *)malloc(42);
2 голосов
/ 13 марта 2012

Хорошо, вы не обращались к системе за памятью, чтобы использовать ее со строкой. Этот код будет работать

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main() {
   char w[11];
   strcpy(w, "Hello Word");
   printf("%s\n", w);
   return 0;
}

Этот код объявляет w как массив char, резервируя для него место в памяти. Другой альтернативой является использование malloc или calloc для указателя на символ. Читайте об этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...