设已有定义:char*st="how are you”;,下列程序段中正确的是()
A. char a[11],*p;strcpy(p=a+1,&st[4]);
B. char a[11];strcpy(++a,st);
C. char a[11];strcpy(a,st);
D. char a[ ],*p;strcpy(p=a[1],st+2);
题目中定义了`char* st="how are you";`,这是一个字符串字面量,指向字符串"how are you"的首字符。
选项分析如下:
A.`char a[11],*p;strcpy(p=a+1,&st[4]);`
• 这个选项中,`p`被赋值为`a+1`,即指向数组`a`的第二个位置。`strcpy`函数将从`&st[4]`开始的字符串复制到`p`指向的位置。`&st[4]`指向字符串"are you"的首字符。这个选项是正确的。
B.`char a[11];strcpy(++a,st);`
• 这个选项中,`++a`使`a`指向数组的第二个位置,然后将整个字符串复制到`a`的第二个位置开始,这会导致字符串的前几个字符被覆盖,并且可能超出数组边界。这个选项是错误的。
C.`char a[11];strcpy(a,st);`
• 这个选项中,`strcpy`将整个字符串"how are you"复制到数组`a`中。由于数组`a`的大小为 11,不足以存储整个字符串及其结尾的空字符`\0`,这会导致数组越界。这个选项是错误的。
D.`char a[ ] ,*p;strcpy(p=a[1],st+2);`
• 这个选项中,`p`被赋值为`a[1]`,但数组`a`未被初始化或分配足够的空间,这会导致未定义行为。此外,`st+2`指向字符串"w are you"的首字符,但`a[1]`可能指向一个无效的内存位置。这个选项是错误的。
因此,正确的答案是 A 选项。
我想知道那个&是干嘛的
唉,这后面的题都没大佬写解析了
为什么编译器下c也可以
快乐小土狗 回复 jinyehui: C选项不是标准语法,编译器虽然能运行但是有warning警告信息。
怎么不改
【解释】a是数组名,是一地址常量,...
用户登录可进行刷题及查看答案
【解释】a是数组名,是一地址常量,++a是非法的,所以答案B错误;因为数组a的
大小为11,执行strcpy(a,st);,st字符串的结尾符’\0’无法存放到数组a中,所以答案C也是
错误的;答案D中定义数组a时未指定大小,所以也是错误的;对于答案A来说,执行strcpy
(p=a+1,&st[4]);,首先将数组a的第二个元素a[1]的地址赋给指针变量p,然后将st第5个
元素开始直到字符串结束为止的字符复制到p所指向的内存单元中,所以选择答案是A。
登录后提交答案