Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.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
此代码正确吗?如果是,则malloc已将地址分配给name[i]变量,那么为什么使用strcpy?_C_String_Pointers_Malloc_Strcpy - Fatal编程技术网

此代码正确吗?如果是,则malloc已将地址分配给name[i]变量,那么为什么使用strcpy?

此代码正确吗?如果是,则malloc已将地址分配给name[i]变量,那么为什么使用strcpy?,c,string,pointers,malloc,strcpy,C,String,Pointers,Malloc,Strcpy,下面是一段代码 char str[20]; char *name[5]; for(i=0;i<5;i++){ printf("Enter a string"); gets(str); name[i]=(char *)malloc(strlen(str)); strcpy(name[i],str); } 当str变量表示的每个string的第5行地址存储在name[i]数组中时,为什么这段代码使用strcpy将每个地址复制到name[i]中

下面是一段代码

 char str[20];
 char *name[5];
 for(i=0;i<5;i++){
     printf("Enter a string");
     gets(str);
     name[i]=(char *)malloc(strlen(str));
     strcpy(name[i],str);
 }
当str变量表示的每个string的第5行地址存储在name[i]数组中时,为什么这段代码使用strcpy将每个地址复制到name[i]中

这个代码正确吗

对不起,没有。请遵循下面提到的要点

第1点

请用C输入malloc和family的返回值

第2点

malloc将为指针分配内存。strcpy用于填充分配的内存。如果你比较一下代码

名称[i]=malloc; 为名称[i]指针分配大小为字节的内存。但是,内存位置的包含未初始化或为垃圾

strcpyname[i],str; 它将str的containts复制到name[i]。在此之后,name[i]包含与str相同的字符串

注:

也就是说,要压缩字符串str,您需要malloc for strlenstr+1字节,以便有空间终止null。否则,您将导致分配的内存区域溢出,从而调用

也是,你应该IMHO,必须考虑使用FEZOUT GET。< /P> 这个代码正确吗

对不起,没有。请遵循下面提到的要点

第1点

请用C输入malloc和family的返回值

第2点

malloc将为指针分配内存。strcpy用于填充分配的内存。如果你比较一下代码

名称[i]=malloc; 为名称[i]指针分配大小为字节的内存。但是,内存位置的包含未初始化或为垃圾

strcpyname[i],str; 它将str的containts复制到name[i]。在此之后,name[i]包含与str相同的字符串

注:

也就是说,要压缩字符串str,您需要malloc for strlenstr+1字节,以便有空间终止null。否则,您将导致分配的内存区域溢出,从而调用


也,你应该仔细考虑,必须考虑使用Fuff-GOT。

< P>线5只分配空间。malloc分配的内存有未指定的值。

第5行仅分配空间。malloc分配的内存有未指定的值。

strcpy调用复制字符,而不是指针

此外,由于未能为终止的“\0”字符包含空间,因此您的分配不足。因此,您的代码具有未定义的行为

所以不,这是不正确的,但问题不是它使用strcpy,这很好

也许这并不奇怪,我也这么认为

最后,你不应该使用gets,这是非常危险的。改用fgets,当然要有一个合适的缓冲区大小参数。

strcpy调用复制字符,而不是指针

此外,由于未能为终止的“\0”字符包含空间,因此您的分配不足。因此,您的代码具有未定义的行为

所以不,这是不正确的,但问题不是它使用strcpy,这很好

也许这并不奇怪,我也这么认为


最后,你不应该使用gets,这是非常危险的。使用fgets,当然要有一个合适的缓冲区大小参数。

当使用malloc时,在内存中创建一个等于字符串大小的空间,但它是一个空空间,只有一个地址。 您必须将字符串上的值复制到名称[i]数组。 一个类比是,你有一个装有水的罐子,你可以创建另一个罐子,但如果你从一个罐子转移到另一个罐子,你只能在上面有水。 pot的创建是malloc函数,内容的传输是strcpy

char str[6];                       //create a empty space for 6 characters

char *name[1];                     //create a pointer for a location where
                                   //the array will be stored, does not
                                   //allocate any space

str = "abcdef"                     //assign letters to character array

name[1]=(char *)malloc(strlen(str+1));     //name[1] = _ _ _ _ _ _ _
                                           //allocate space char array with
                                           //size equal to str array plus 1

strcpy(name[1],str);                       //name[1] = a b c d e f /0
                                           //copy the letters from one char
                                           //array to the other

字符数组有6个字符加上一个空字符来表示数组的结尾

当您使用malloc时,您在内存中创建一个等于字符串大小的空间,但它是一个空空间,您只有一个地址。 您必须将字符串上的值复制到名称[i]数组。 一个类比是,你有一个装有水的罐子,你可以创建另一个罐子,但如果你从一个罐子转移到另一个罐子,你只能在上面有水。 pot的创建是malloc函数,内容的传输是strcpy

char str[6];                       //create a empty space for 6 characters

char *name[1];                     //create a pointer for a location where
                                   //the array will be stored, does not
                                   //allocate any space

str = "abcdef"                     //assign letters to character array

name[1]=(char *)malloc(strlen(str+1));     //name[1] = _ _ _ _ _ _ _
                                           //allocate space char array with
                                           //size equal to str array plus 1

strcpy(name[1],str);                       //name[1] = a b c d e f /0
                                           //copy the letters from one char
                                           //array to the other
字符数组有6个字符加上一个空字符,表示数组的结尾

TL;博士

malloc为进程分配要使用的内存

strcpy将所需内容复制到malloced地址空间。

TL;博士

malloc为进程分配要使用的内存


strcpy将所需内容复制到malloced地址空间。

您必须malloc strlen+1字节您必须malloc strlen+1字节。。。你能编辑你的文章,包括一个小的代码示例吗?这有助于进一步强化你的观点。有趣的类比。。。你能编辑你的文章,包括一个小的代码示例吗?这有助于进一步强化你的观点。谢谢你的回答!顺便说一句,我在编程方面还是个孩子!谢谢你的回答!顺便说一句,我在编程方面还是个孩子!