我正在尝试以下代码:
int main()
{
char *yo = "yo";
char *whaddup = NULL;
strcpy(whaddup,yo);
}
我得到了一个段错误。在这里完成C noob - 其他地方说我应该将whaddup
初始化为数组。为什么我不能传入指向null的指针?
答案 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
的复制字符串,您的dest
是null
。