strcpy 传递初始化的空指针 c

strcpy pass initialized null pointer c

我正在尝试以下代码:

int main()
{
   char *yo = "yo";
   char *whaddup = NULL;
   strcpy(whaddup,yo);
}

我遇到了段错误。在这里完成 C noob - 其他地方说我应该将 whaddup 初始化为数组。为什么我不能传入空指针?

您必须将 whaddup 声明为字符数组,或者最好为它分配 space malloc

int main()
{
   char *yo = "yo";
   char *whaddup = malloc(sizeof(char) * 8); // buffer for 8 characters
   strcpy(whaddup,yo);
}

通过将 whaddup 初始化为 NULL,您不会在内存中给它任何 space,因此即使将一个字符复制到其中也会导致分段错误。

任何 strcpy 文档都会告诉您目标字符串应该是一个 char 数组,其大小足以容纳字符串和 NUL 终止符。

所以你需要的是

char* yo = "yo";
char* whaddup = malloc(strlen(yo)+1);
strcpy(whaddup, yo);

或者您可以使用 strdup 函数来为您执行此操作,但它不是标准的,因为它仅是 POSIX。

您可以传入一个指向 null 的指针,但是您不能将字符串从指针复制到 null。

函数char* strcpy(char* dest, const char* src)是从地址src复制字符串到地址dest,你的destnull