C语言字符串题:库函数strcpy用于复制字符串,若有以下定义语句:

char str1[]="china",str2[19],*str3,*str4="china";

则对库函数strcpy的正确的调用是
A. strcpy(str1,"poeple")
B. strcpy(str2,"poeple")
C. strcpy(str3,"poeple")
D. strcpy(str4,"poeple")
求详细解析

B

解析:strcpy函数原型是char *strcpy(char* dest, const char *src);功能是 把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间。要注意,src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。(具体可以看你的C语言课本)
由定义语句,str1是一个6字节(china5个字母还有一个结束符/NULL)字符型数组,str1表示的是该6字节内存地址的首位;同理,str2表示的是一段19个字节内存地址首位,并且该内存已经划分出来,虽然不知道内容是什么,但是已经在内存中占有位置;而str3是一个字符型指针,但是没有初始化,也就意味着现在,str3并不在内存中占有任何物理空间;str4也是字符型指针,经过初始化,str4指向字符串china的首地址。常量,不能通过strpy函数而只能用赋值语句赋值。
再看选项,people是6个字符,加上结束符,要复制这段字符就需要7字节内存,str1只有6字节,长度不够,复制会造成溢出;str3还没有在内存中分配位置,str4不能用这种方法赋值。因此只有str2符合要求。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-06-25
正确答案选择B
由于存储poeple需要7个单位的存储空间,最后一个是'\0'
所以str1空间不足,A错误
str3是一个指针,没有开辟空间C错误
str4也是一个指针,指向一个常量,D错误追问

字符指针str4在被赋值为字符串"china"之后,就不能被赋值为其他字符串了吗?

追答

str4是一个指针,是可以重新指向其他位置的,比如str4=str2这样的式子是合法的。

追问

那把已经被赋值为china的str4再赋值为people可以吗?

追答

strcpy是把第二个字符串复制到第一个字符串,是不会更改指针指的地址的。

相似回答