为什么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;
}
Run Code Online (Sandbox Code Playgroud)
在memset将覆盖它指向的内存的指针来代替.它应该是:
memset(buffPtr, 0, 128);
Run Code Online (Sandbox Code Playgroud)
我删除了&符并设置了正确的大小(sizeof(buffPtr)是指针的大小,而不是分配的大小).
您还应该将断言更改为buffPtr != NULL不带符号的检查(&buffPtr永远不会为空).并且assert在这里使用并不正确,因为它在发布版本中可能无效.