Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中的字符串复制_C_String_Malloc_Strcpy_Strdup - Fatal编程技术网

C语言中的字符串复制

C语言中的字符串复制,c,string,malloc,strcpy,strdup,C,String,Malloc,Strcpy,Strdup,我有一个传递字符指针的函数,比如: funtion_name (char* string){ ... } 我想将字符串复制到一个临时字符串变量,然后将其复制到一个结构中。这就是我迄今为止所做的: char* namecpy = malloc(strlen(string+1)); strcpy(namecpy, string); strcpy(ptr->name, namecpy); 当我调用函数时,这给了我一个分段错误。我想这是因为我不允许直接复制到struct变量中。。。但是我还必须

我有一个传递字符指针的函数,比如:

funtion_name (char* string){
...
}
我想将字符串复制到一个临时字符串变量,然后将其复制到一个结构中。这就是我迄今为止所做的:

char* namecpy = malloc(strlen(string+1));
strcpy(namecpy, string);
strcpy(ptr->name, namecpy);

当我调用函数时,这给了我一个分段错误。我想这是因为我不允许直接复制到struct变量中。。。但是我还必须复制它吗?

您复制了两次,可能是第二个目标ptr->name没有正确分配,所以它崩溃了

你的意思是:

ptr->name = malloc(strlen(string)+1);
strcpy(ptr->name, string);
在目标位置分配缓冲区。除非你万不得已,否则不要乱搞临时变量


您写入的每个缓冲区必须事先为其分配足够的内存。C不会帮你检查这个,它会毫不犹豫地完全按照你的要求去做,所以当你操作一个危险的设备(比如电锯)时,你必须非常注意你是如何使用它的。

你可以将malloc和strcpy与strdup函数结合起来。包括


使用完ptr->name后,别忘了拨打免费电话。

Strenstring+1@Deduplicatorstrdup符合SVr4、4.3BSD、POSIX.1-2001的要求。
ptr->name = strdup(string);