
5个回答
展开全部
strcpy(char a*, char b*)的作用,简单讲就是给你两个内存起始地址(你可以将它们想象成给了你两排箱子,每个箱子都有编号,比如第一排的编号是0,1,2,3,4,第二排的编号是7,8,9,则a,b分别就是这两排箱子的起始编号),将以b开始的内存地址中的数据复制到以a开始的内存地址中(就是将箱子7中的东西复制到箱子0,将箱子8中的东西复制到箱子1,...)。因为a要容纳b的所有数据,所以分配给a的内存数量必须大于等于分配给b的内存数量(大于意味着a的内存没装满,有富余空间),即第一排箱子的数量要大于第二排的。
具体到你的问题,箱子的数量就是分配给数组或字符指针的内存字节数。str1和str4都分配了9个字节,因为把字符串分配给char数组(数组的大小没由你显式指定时才这样)或char指针时,会比字符串的实际长度多分配1个字节,以容纳'\0'字符,str2是8个字节(8是显式指定的),而str3一个字节也没分配,所以不能把"HELL03"复制给str3,因为要装下"HELL03",需要至少7个字节('\0'也要一个字节)。
具体到你的问题,箱子的数量就是分配给数组或字符指针的内存字节数。str1和str4都分配了9个字节,因为把字符串分配给char数组(数组的大小没由你显式指定时才这样)或char指针时,会比字符串的实际长度多分配1个字节,以容纳'\0'字符,str2是8个字节(8是显式指定的),而str3一个字节也没分配,所以不能把"HELL03"复制给str3,因为要装下"HELL03",需要至少7个字节('\0'也要一个字节)。
展开全部
strcpy(char *, char *)函数表示将第二个参数开始的字符串拷贝到第一个参数的字符串位置。故strcpy (a+1, b+2) 表示将b[2]开始的字符串复制到a[1]开始的字符串中,即a数组变为“a2”。 strcat(char *, char *)函数表示将第二个参数开始的字符串接到第一个参数开始的字符串上,返回第一个字符串的指针。故strcat(a,c+1)表示将c[1]开始的字符串接到“a2”后面,a数组变成“a2yz”。
追问
没听懂,大神能不能结合选项讲讲
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
str3定义了但是没有初始化,你可以理解成起了个名字但是没有分配内存,所以不能进行复制字符串操作
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
先看选项C,strcpy(str4,"HELLO4");
前提是str4已经定义为指针,且执向"GREETING"。
在执行char *str4="GREETING"时,系统先储存一个字符串"GREETING",并把首地址存在str4变量中。这时的定义如同char str4[]="GREETING"类似。就是把str4定义成了一个字符串指针变量。这时可以往str4中复制字符。所以C是正确的。
再来看选项B,strcpy(str3,"HELLO4");
注意str3只定义为字符指针,并未分配其他储存空间。系统解释str3仅仅是一个执向字符的普通指针。所以任何往里复制字符的行为都无法完成。所以B是错误的。
应该选B。
如有不明白,请留言。
前提是str4已经定义为指针,且执向"GREETING"。
在执行char *str4="GREETING"时,系统先储存一个字符串"GREETING",并把首地址存在str4变量中。这时的定义如同char str4[]="GREETING"类似。就是把str4定义成了一个字符串指针变量。这时可以往str4中复制字符。所以C是正确的。
再来看选项B,strcpy(str3,"HELLO4");
注意str3只定义为字符指针,并未分配其他储存空间。系统解释str3仅仅是一个执向字符的普通指针。所以任何往里复制字符的行为都无法完成。所以B是错误的。
应该选B。
如有不明白,请留言。
追问
大神,我理解有点混乱,*str3定义了之后应该可以用字符串给它初始化,这样*str3指向字符串就等于给它复制了呀,但是*str4被字符串初始化之后,这个字符串应该是字符串常量,不能更改了,为什么还能复制进*str4呢?大神再指点指点我
追答
关于str4,在不同版本和不同机器上,结果是有区别的。你说的*str4="greating"时,字符串是放在常量区的,这时字符串就不能修改了,c选项也是错误的了。
而str3只是一个指针,没有分配储存字符的空间,不能往里复制字符。只能让他指向一个字符或字符串,如:
str4=str3;
貌似赋值(或复制)了,其实没有,它仅仅是指向str3而已。

你对这个回答的评价是?
展开全部
A 不用说肯定是对的。
B str3的值是一个无效的指针,无疑是错的。
C str4 指向的是一个字符串常量,通常情况下是能修改的,按照这种情况是错的。但也有你例外,不同的平台也有可能字符串也是可以修改的。按照这种情况就是对的。所以 C 的对错是看情况的。
B 肯定是不对的。
B str3的值是一个无效的指针,无疑是错的。
C str4 指向的是一个字符串常量,通常情况下是能修改的,按照这种情况是错的。但也有你例外,不同的平台也有可能字符串也是可以修改的。按照这种情况就是对的。所以 C 的对错是看情况的。
B 肯定是不对的。
追问
大神,为什么*str3是无效指针,不可以定义了之后直接用右边字符串给它赋予地址吗?*str4已经用字符串常量初始化了呀,应该不可以改的呀,大神再指点指点我
追答
strcpy 是复制字符串,不是直接把字符串指针赋给str3, 在对 str3 使用 strcpy 时,str3 必须是一个有效的指针。而 str3 没有初始化,也没有赋一个有效值 。
str4 有些平台是可以改变的。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询