问题
单项选择题
以下程序运行后的输出结果是
#include< string.h>
main()
char m[20]= 'a', 'b', 'c', 'd', n[]="abe", k[]="abcde";
strcpy (m+strlen (n), k); strcat (m, n);
prinff(" % d% d \n", sizeof(m), strlen (m));
A) 20 11
B) 9 9
C) 20 9
D) 11 11
答案
参考答案:A
解析: strlen返回的是不包括'\0'在内的数组实际长度。初始时,strlen(n)=3,函数调用strcpy(m+stlen(n), k); ,将字符串k复制到m[3]到m[6]中,执行后m[20]=t'a', 'b', 'c', 'a', 'b', 'e', 'd', 'e'}。函数调用strcat(m, n); 执行后m[20]={'a', 'b', 'e', 'a', 'b', 'e', 'd', 'e', 'a', 'b', 'e'},共11个字符。但m仍然占有20个字节。所以sizeof(m)=20,strlen(m)=11。