Ошибка сегментации при выполнении strncpy для указателя на массив строк C

Я пытаюсь скопировать подстроку s в указатель на массив строк. И ниже мой код. Я выделил память с помощью malloc. Но когда я пытаюсь выполнить strncpy, я получаю ошибку сегментации. Может кто-нибудь, пожалуйста, дайте мне знать, если что-то не так с моим кодом? Или разрешено использовать strncpy для массива указателей на строки

s — строка длины 32

char **suptr = (char **)malloc(sizeof(char *) * 11);  
if(suptr != NULL)
{
strncpy(suptr[0], s, 10);
strncpy(suptr[1], s+10, 10);
strncpy(suptr[2], s+20, 10);
strncpy(suptr[3], s+30, 2);
}

заранее спасибо


person pranathi    schedule 13.12.2020    source источник
comment
Плохая практика (ненужная) приводить результат malloc.   -  person Daniel Walker    schedule 13.12.2020
comment
Каков размер s?   -  person Krishna Kanth Yenumula    schedule 13.12.2020
comment
Его 32-битная строка   -  person pranathi    schedule 13.12.2020
comment
Я имею в виду длину строки s   -  person Krishna Kanth Yenumula    schedule 13.12.2020
comment
Длина 32   -  person pranathi    schedule 13.12.2020


Ответы (1)


Вы выделили массив из char указателей. Однако эти указатели не инициализированы. То есть они содержат ненужные данные и на самом деле не указывают ни на что значимое. Итак, когда вы пытаетесь скопировать данные на них, вы пишете на недопустимые адреса.

Каждый указатель должен быть сначала направлен на действительный раздел памяти. Один простой способ сделать это:

for (int k=0; k<11; k++) {
    suptr[k] = malloc(sizeof(char)*10); // Or whatever length you want.
    if ( !suptr[k] ) {
        // handle the error
    }
}
person Daniel Walker    schedule 13.12.2020