memcpy期间的分割错误

memcpy期间的分割错误

我正在尝试创建一个函数,它将反转字符串部分的顺序。我刚开始使用指针,出于某种原因,我可以访问字符串字符的位置来复制子字符串,但我不能将它们放回同一个位置。。。
当我试图将反向子串复制回其原始位置时
程序接收信号SIGSEGV,分段故障。
0x00007FF7B5DC66英寸??()来自/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;
    }
}

最佳答案

  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;
}

在分配的内存之外访问。

关于c - memcpy期间的分割错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15100795/

10-11 18:55