此代码正确吗?如果是,则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字节。。。你能编辑你的文章,包括一个小的代码示例吗?这有助于进一步强化你的观点。有趣的类比。。。你能编辑你的文章,包括一个小的代码示例吗?这有助于进一步强化你的观点。谢谢你的回答!顺便说一句,我在编程方面还是个孩子!谢谢你的回答!顺便说一句,我在编程方面还是个孩子!