strcpy传递初始化空指针c
我正在尝试以下代码:
int main() { char *yo = "yo"; char *whaddup = NULL; strcpy(whaddup,yo); }
我得到了一个段错误。 在这里完成C noob – 其他地方说我应该将whaddup
初始化为数组。 为什么我不能传入指向null的指针?
任何strcpy
文档都会告诉您目标字符串应该是一个大小足以容纳字符串和NUL
终结符的char
数组。
所以你需要的是类似的东西
char* yo = "yo"; char* whaddup = malloc(strlen(yo)+1); strcpy(whaddup, yo);
或者您可以使用strdup
函数为您执行此strdup
,但它不是标准的,因为它只是POSIX。
您必须将whaddup
声明为字符数组,或者使用malloc
为其理想地分配空间。
int main() { char *yo = "yo"; char *whaddup = malloc(sizeof(char) * 8); // buffer for 8 characters strcpy(whaddup,yo); }
通过将whaddup
初始化为NULL
您不会在内存中给它任何空间,因此即使将一个字符复制到其中也会导致分段错误。
您可以将指针传递给null,但不能将指针中的字符串复制到null。
函数char* strcpy(char* dest, const char* src)
是从地址src
到地址dest
复制字符串,你的dest
为null
。