Ошибка сегментации во время memcpy

Я пытаюсь сделать функцию, которая меняет порядок части строки. Я новичок в использовании указателей, и по какой-то причине я могу получить доступ к расположению символов моей строки, чтобы скопировать подстроку, но я не могу вернуть их в то же место...

Когда я пытаюсь скопировать обратную подстроку обратно в исходное местоположение, я получаю

Программа получила сигнал SIGSEGV, Ошибка сегментации. 0x00007ffff7b5dc66 в?? () из /lib/x86_64-linux-gnu/libc.so.6

Любая помощь будет потрясающей!

Вот что у меня так далеко:

void reverse(char* line, int start, int end){

      char str[end-start];

      memcpy ( str , line + start , end-start );

      reverseSubString ( str );

      memcpy ( line + start, str , end-start );

}

void reverseSubString(char* str){

    int i, j, len;
    char temp;

    i=j=len=temp=0;

    len=strlen(str);

    for (i=0, j=len-1; i<=j; i++, j--)
    {
        temp=str[i];
        str[i]=str[j];
        str[j]=temp;
    }
}

2 ответа

  char str[end-start];

  memcpy ( str , line + start , end-start );

Если 0-терминатор исходной строки не включен, у вас есть char массив, который не заканчивается 0. Так

len=strlen(str);

вычисляет кто знает что, если это не произойдет. затем

for (i=0, j=len-1; i<=j; i++, j--)
{
    temp=str[i];
    str[i]=str[j];
    str[j]=temp;
}

доступ за пределы выделенной памяти.

reverseSubstring() ожидает N-концевую строку C, потому что она вызывает strlen() в передаваемой строке. Однако вам не удается завершить NUL-строку в reverse функция. Либо сделать это, или даже лучше, передать в length аргумент:

void reverseSubString(char *str, size_t len)
{
    int i, j;
    char temp;

    for (i = 0, j = len - 1; i <= j; i++, j--) {
        temp = str[i];
        str[i] = str[j];
        str[j] = temp;
    }
}

void reverse(char *line, int start, int end)
{
    char str[end - start];
    memcpy(str, line + start, end - start);
    reverseSubString(str, end - start);
    memcpy (line + start, str, end - start);
}
Другие вопросы по тегам