分段错误 - 字符指针

Mik*_*son 6 c segmentation-fault

在下面的代码中,行:

*end = *front;
Run Code Online (Sandbox Code Playgroud)

给出了分段错误.我在这里问了一个类似的问题,但我不确定这是不是因为我有两份num.请解释为什么它是seg-faulting.谢谢.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char* getPalin(char* num);

int main()
{
    char* num = (char*)malloc(100);

    num = "123456";

    printf("%s\n", getPalin(num) );

    return 0;
}

char* getPalin(char* num)
{
    int length = strlen(num);

    if ( length % 2 == 0 )
    {
        char* front = num;
        char* end = num + strlen(num) - 1;  //pointer to end

        while( front != num + (length/2) )  //pointers not middle yet
        {
            *end = *front;

            printf("%c", *end);

            front++;
            end--;
        }
    }

    return num;
}
Run Code Online (Sandbox Code Playgroud)

pax*_*blo 17

这两行:

char* num = (char*)malloc(100);
num = "123456";
Run Code Online (Sandbox Code Playgroud)

有以下效果.

第一个分配100个字节并设置num为指向那些字节.

第二个将num更改为指向字符串"123456",这几乎肯定是在只读存储器中.

任何更改只读内存内容的尝试都将导致分段违规.您需要在尝试更改之前将字符串复制到malloc'd中num,并使用:

strcpy (num, "123456");
Run Code Online (Sandbox Code Playgroud)

这就是你现在应该拥有的那条线:

num = "123456";
Run Code Online (Sandbox Code Playgroud)