C语言选择题 这种题应该用什么思路解题 还望大家指教?

有以下程序,程序运行的输出结果是#include<string.h>#include<stadio.h>main(){charp〔20〕={'E','F','G','H'... 有以下程序,程序运行的输出结果是
# include <string.h>
# include <stadio.h>
main( )
{ char p〔20〕={'E','F','G','H'},
q〔〕="EFGH",r〔〕="EFGHI";
strcat (p,r); strcpy (p+strlen(q), q);
printf("%d\n",strlen(p) );
}

A 9
B 11
C 6
D 8
展开
 我来答
帐号已注销
2019-12-06 · TA获得超过317个赞
知道小有建树答主
回答量:345
采纳率:90%
帮助的人:85.1万
展开全部

正确答案:D。

这个题综合考察了字符数组、字符串的概念以及strcat、strcpy、strlen三个函数的应用。

没有特别的解题技巧,除了掌握上述知识外,要训练阅读代码的能力。

从第一行开始,一行行读,根据数据流向,记录数据状态。


  1. p[]:EFGH‘\0’……'\0'

  2. q[]:EFGH‘\0’

  3. r[]:EFGHI‘\0’

  4. strcat(p,r):p[]:EFGHEFGHI‘\0’

  5. strcpy (p+strlen(q), q);:p[]: EFGHEFGH‘\0’

  6. printf("%d\n",strlen(p) );:strlen统计‘\0’之前的字符,所以输出为8。

平时多练习,才能熟悉这些函数。可以用调试器看内存情况。

哈哈哈dxwM
2019-12-06 · TA获得超过114个赞
知道小有建树答主
回答量:375
采纳率:72%
帮助的人:77.5万
展开全部
这个考察字符 包不包含'/0'的结果是什么。
strlen对于上述的结果变化。
strcat后的变化。
strcpy的copy指针位置的影响。
分不清就多跑几个例子。我也记不清了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yzjxbin76
2019-12-06 · TA获得超过123个赞
知道小有建树答主
回答量:251
采纳率:67%
帮助的人:62.3万
展开全部
选D,strcpy中将p指向的字符串后移了4个位置,即q中字符串的长度。然后以这个位置为起点向p拷贝q的字符串。合起来就是两倍的q的字符串长。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
莹纱之梦
2019-12-06 · TA获得超过3753个赞
知道大有可为答主
回答量:1543
采纳率:82%
帮助的人:243万
展开全部
选D 8
赋值完成后,3个字符串分别为:

p: EFGH
q: E F G H \0
r: E F G H I \0
strcat (p,r)将r接到p后,此时p为E F G H E F G H I \0
strcpy (p+strlen(q), q); strlen(q)是4,所以从p后移4位的地方开始粘贴q,结果p为
E F G H E F G H \0 \0
字符串取到第一个\0的位置,\0不算在长度内,所以长度为8
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
最大的宝宝
2019-12-06 · TA获得超过828个赞
知道小有建树答主
回答量:1569
采纳率:67%
帮助的人:393万
展开全部
strcat -> p+r -> EFGH + EFGHI -> EFGHEFGHI
strcpy -> pr 中的r被q覆盖 -> pq -> EFGHEFGH
选D
字符串结尾的终止符0不计入长度,但只要存在这个0,就会截断之后的所有字符,意即这些字符已经不再属于这个字符串了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式