首页 > 试题广场 >

已知:char str1[8],str2[8]={"good

[单选题]

已知:char str1[8],str2[8]={"good"};,则在程序中不能将字符数组str2赋值给str1的语句是()

  • str1=str2;
  • strcpy(str1,str2);
  • strncpy(str1,str2,6);
  • memcpy(str1,str2,5);
推荐

【解释】数组名是一地址常量,数组名之间是不能彼此赋值的,所以A是错误的。故

选择答案是A

发表于 2018-05-06 22:39:15 回复(3)
数组名  是 地址常量。常量之间 是不能互相赋值的。
strcpy 和 memcpy函数。
1、strcpy 其一般形式为strcpy(字符数组1,字符串2)作用是将字符串2复制到字符数组1中去。
2、memcpy c和c++使用的内存拷贝函数,memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中。 用法:void *memcpy(void *dest, const void *src, size_t n);
3.区别 
  1)复制的内容不同    前者只能复制字符串   后者可以复制任意内容
  2)复制的方法不同    前者复制时可以不用制定长度   后者需要指定长度 
  3)用途不同              通常复制字符串时用前者,复制其他内容时用后者。
发表于 2018-08-16 09:52:35 回复(0)
strcpy(str1,str2,6)是什么鬼?
发表于 2018-06-05 17:40:57 回复(5)
数组名是地址常量,相互之间不可赋值。c选项应该有错误,不应该是strcopy应该是strncopy。strcopy的表示形式是char *strcpy(char *dest, char *src);而strncopy的原型是char * strncpy(char *dest, char *src, size_t n);后者才会定义长度。

strcpy:字串复制

原型:char *strcpy(char *dest, char *src);

功能:把src所指由'\0'结束的字符串复制到dest所指的数组中。

说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。

返回指向dest的指针。

注意:当src串长度>dest串长度时,程序仍会将整个src串复制到dest区域,可是dest数组已发生溢出。

因此会导致dest栈空间溢出以致产生崩溃异常。如果不考虑src串的完整性,可以把dest数组最后一元素置为NULL,从dest串长度处插入NULL截取字串

原型:char * strncpy(char *dest, char *src, size_t n);

功能:将字符串src中最多n个字符复制到字符数组dest中(它并不像strcpy一样只有遇到NULL才停止复制,而是多了一个条件停止,就是说如果复制到第n个字符还未遇到NULL,也一样停止),返回指向dest的指针。

头文件:#include "string.h"

说明:

如果n > dest串长度,dest栈空间溢出产生崩溃异常。

否则:

1)src串长度<=dest串长度,(这里的串长度包含串尾NULL字符)

如果n=(0, src串长度),src的前n个字符复制到dest中。但是由于没有NULL字符,所以直接访问dest串会发生栈溢出的异常情况。

如果n = src串长度,与strcpy一致。

如果n = dest串长度,[0,src串长度]处存放于desk字串,(src串长度, dest串长度]处存放NULL。

2)src串长度>dest串长度

如果n =dest串长度,则dest串没有NULL字符,会导致输出会有乱码。如果不考虑src串复制完整性,可以将dest最后一字符置为NULL。

综上,一般情况下,使用strncpy时,建议将n置为dest串长度(除非你将多个src串都复制到dest数组,并且从dest尾部反向操作),复制完毕后,为保险起见,将dest串最后一字符置NULL,避免发生在第2)种情况下的输出乱码问题。当然喽,无论是strcpy还是strncpy,保证src串长度。



发表于 2018-11-25 22:46:36 回复(0)
C不应该是是strncpy?
发表于 2018-09-22 18:42:18 回复(0)
D不应该是6吗?不该是5
发表于 2020-12-05 00:24:07 回复(0)
日常错误导致不知道选哪个
发表于 2019-08-19 17:26:38 回复(0)
char str1[8],str2[8]={"good"}; str1 = str2; //数组名在等号左边赋值直接错误!
编辑于 2024-03-31 04:11:14 回复(0)
选项c是不是也存在一些问题
发表于 2021-07-05 17:35:05 回复(0)
mmp你要考深拷贝和浅copy就说啊。赋值A 也是赋值啊。意义不明
发表于 2019-07-03 22:17:53 回复(0)
C项,没“;”,语法都不对了
发表于 2019-03-10 19:33:36 回复(0)
d选项对吗
发表于 2018-07-20 16:49:30 回复(0)