题目要求
若有以下定义和语句:
char *s1="12345",*s2="1234";
printf("%d\n",strlen(strcpy(s1,s2)));
则输出结果是
思路分析
strcpy是一种C语言的标准库函数,strcpy把含有'\0'结束符的字符串复制到另一个地址空间,返回值的类型为char*。
strlen所作的是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值(长度不包含'\0')。
翻译文字strcpy(s1,s2)将字符串"1234"全部复制到s1中,将原来的内容覆盖。s1中的12345分别被1234\0取代。故最终计算得出答案为4。
注意,如果要用代码执行,这样写是不行的!
char *s1="12345",*s2="1234";C语言中对于字符指针,这样赋值是错误的,如果定义为字符数组的话应该这么写
char s1[6]={"12345"},s2[5]={"1234"}
代码演示
#include <stdio.h>
#include <string.h>
int main()
{
char s1[6]="12345",s2[5]="1234";
printf("%d\n",strlen(strcpy(s1,s2)));
return 0;
}
查看结果
和咱们前面分析的一样,输出结果为 4