为什么这个c代码在strcpy中出现分段错误?

时间:2017-06-11 16:16:43

标签: c

为什么strcpy()的代码会给我一个分段错误?我正在使用GNU,当代码达到strcpy时,它就会因为分段错误而失败。

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

void PrintString(char *buff);
int main()
{
    char *buffPtr = malloc(128);

    assert(&buffPtr != NULL);

    memset(&buffPtr, 0, sizeof(buffPtr));

    strcpy(buffPtr,  "This is my string");

    free(buffPtr);
    return 0;
}

1 个答案:

答案 0 :(得分:6)

memset将覆盖指针而不是它指向的内存。它应该是:

memset(buffPtr, 0, 128);

我删除了&符并设置了正确的大小(sizeof(buffPtr)是指针的大小,而不是分配的大小。

您还应该更改断言以在没有&号的情况下检查buffPtr != NULL&buffPtr永远不会为空)。使用assert在这里并不正确,因为它在发布版本中可能无效。