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
,你的dest
是null
。
我正在尝试以下代码:
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
,你的dest
是null
。