为什么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;
}
答案 0 :(得分:6)
memset
将覆盖指针而不是它指向的内存。它应该是:
memset(buffPtr, 0, 128);
我删除了&符并设置了正确的大小(sizeof(buffPtr)
是指针的大小,而不是分配的大小。
您还应该更改断言以在没有&号的情况下检查buffPtr != NULL
(&buffPtr
永远不会为空)。使用assert
在这里并不正确,因为它在发布版本中可能无效。