strcpy传递初始化的空指针c

时间:2016-06-28 01:41:01

标签: c strcpy

我正在尝试以下代码:

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

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

3 个答案:

答案 0 :(得分:2)

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

所以你需要的是像

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

或者您可以使用strdup功能为您执行此操作,但它不是标准的,因为它只是POSIX。

答案 1 :(得分:1)

您必须将whaddup声明为字符数组,或者理想情况下为malloc分配空间。

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

通过将whaddup初始化为NULL,您没有在内存中提供任何空间,因此即使将一个字符复制到其中也会导致分段错误。

答案 2 :(得分:0)

您可以将指针传递给null,但不能将指针中的字符串复制到null。

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