Назначение на char * [50]? - PullRequest
0 голосов
/ 10 марта 2012

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

char *temp[50];

И чтобы изменить это, я делаю что-то вроде:

strcpy(temp[1],"Hi");

Однако эта сегментация ошибочна.Я пробовал &temp[1], однако это не работает.Может ли кто-нибудь указать мне правильное направление.

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

То, что я пытаюсь сделать, это иметь 50 символов (такЯ мог бы положить char * temp1, char * temp2 и т. Д.) Только в один, поэтому он будет переходить от char * temp1, char * temp2 и т. Д. К char * temp [50]

Ответы [ 4 ]

2 голосов
/ 10 марта 2012

Вы создали только массив указателей, которые ни на что не указывают.Вам необходимо назначить память для temp[1], возможно, через malloc, до strcpy.

temp[1] = malloc(3); /* Hi\0 */
1 голос
/ 10 марта 2012

Вы объявляете массив указателей. Вам нужно выделить память либо в стеке:

temp[1] = "Hi";

или в куче:

temp[1] = malloc(sizeof("Hi"));

Или, возможно, вы хотели объявить только массив символов:

char temp[50];
1 голос
/ 10 марта 2012

использовать malloc () или фиксированный 2d массив (фактически 1d).

 char temp[10][50]={0};

 strcpy(temp[1],"Hi");

 printf("%s", temp[1]);
1 голос
/ 10 марта 2012

Сегфоут происходит, потому что temp[1] изначально нигде не указывает (*). У

temp[1] = malloc(sizeof("Hi"));
// check for errors
strcpy(temp[1], "Hi");

или, на платформе POSIX

temp[1] = strdup("Hi");

Не забудьте free результаты malloc и / или strdup!

(*) Указатели являются либо NULL, когда temp равен static, либо глобальными, либо содержат случайный мусор.

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