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

有以下程序,程序运行的输出结果是
# 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

正确答案:D。

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

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

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


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

    q[]:EFGH‘\0’

    r[]:EFGHI‘\0’

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

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

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

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

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-12-06
这个考察字符 包不包含'/0'的结果是什么。
strlen对于上述的结果变化。
strcat后的变化。
strcpy的copy指针位置的影响。
分不清就多跑几个例子。我也记不清了。
第2个回答  2019-12-06
选D,strcpy中将p指向的字符串后移了4个位置,即q中字符串的长度。然后以这个位置为起点向p拷贝q的字符串。合起来就是两倍的q的字符串长。
第3个回答  2019-12-06
选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
第4个回答  2019-12-06
strcat -> p+r -> EFGH + EFGHI -> EFGHEFGHI
strcpy -> pr 中的r被q覆盖 -> pq -> EFGHEFGH
选D
字符串结尾的终止符0不计入长度,但只要存在这个0,就会截断之后的所有字符,意即这些字符已经不再属于这个字符串了