Использование strcpy со строковым массивом в C - PullRequest
6 голосов
/ 31 августа 2011

У меня есть массив символов, определенный следующим образом: char *c[20];
Я пытаюсь сделать: strcpy(c[k], "undefined); но это не работает

Я также попытался определить его как char c[20][70], но безуспешно.

Редактировать: Я действительно знаю, что это массив массивов символов, он мне нужен вот так.

Ответы [ 2 ]

8 голосов
/ 31 августа 2011

Это не массив символов;это массив указателей символов.Удалите *, чтобы сделать его массивом символов:

char c[20];

Тогда вы можете использовать strcpy:

strcpy(c, "undefined");

Если вы действительно хотите массив массивов символов, выдолжен сделать то, что вы сказали, что пытались:

// array that holds 20 arrays that can hold up to 70 chars each
char c[20][70];

// copy "undefined" into the third element
strcpy(c[2], "undefined");

Возможно, проблема в том, что вы пропустили закрывающий ", хотя я не знаю, была ли это ошибка вставки.Или проблема могла заключаться в том, что вы используете k без его определения, мы не можем знать, не увидев полученного сообщения об ошибке.

Если вы хотите установить их все в эту строку, топросто зациклите их:

char c[20][70];

int i;
for (i = 0; i < 20; ++i)
    strcpy(c[i], "undefined");
3 голосов
/ 31 августа 2011

Если вам нужно иметь 20 строк по 70 символов в каждой, тогда ваш второй вариант должен работать:

char c[20][70];
for (int k = 0; k < 20; k++)
    strcpy(c[k], "undefined");

Определение char *c[20] неверно, поскольку вы просто определяете массив из 20 указателей, а указатели не инициализируются. Вы можете заставить его работать следующим образом:

char *c[20];
for (int k = 0; k < 20; k++) {
    c[k] = malloc(70);
    strcpy(c[k], "undefined");
}

// then when you are done with these strings
for (int k = 0; k < 20; k++)
    free(c[k]);
...