这个完全看不懂🙀🙀求走一遍程序给渣渣听一下 最后求的是字符串长度???不懂

如题所述

首先你给出的题目就很有问题。使用strcat和strcpy的话必须要加上string.h头文件。另外你也没有给main函数制定返回值的类型。不过这些问题不影响我理解你要表达的意思。

在用C语言操作字符串的时候,时刻牢记一点:对字符串的操作是通过操作指向字符串内字符的指针来实现的,字符串的名称(比如你程序中的p、q)都会被编译器理解为指向字符串首字符的指针(其实所有的数组变量都是这样)。

第一句:char p[20]={'a','b','c','d'},q[]="abc",r[]="abcde";
你定义了三个字符串,p存储的是 a b c d ,q存储了 a b c \0,r 存储了 a b c d e \0

(其中的 \0 表示的是字符串结束的空字符,由程序自动加上)

第二步:strcat(p,r);
你将r中的内容拼接到p的后面,于是p中内容变成了 a b c d a b c d e \0。没错,程序帮你自动加上了字符串终止符\0.

第三步:strcpy(p+strlen(q),q);
将q中的内容复制到p+strlen(q)开始的位置。strlen(q)返回q的实际长度3,p在这里表达的是指向字符串首字符的指针(注意我在一开始写的话),加3后指针后移三格,从a移动到了d。于是从d开始后面的内容被q所覆盖,p中的内容变成了a b c a b c \0 c d e。没错,\0也一起跟过来了。

最后一步,输出strlen
strlen返回的是字符串从第一个字符开始到字符串结束符的长度,也就是说,strlen只能看到前面的a b c a b c,当它发现后面跟着的是个\0的时候,他认为这个字符串已经结束了。于是返回他看到的长度:6。

所以,程序最后输出的结果是6。追问

给跪了!!!!!🙀🙀渣渣看懂了~~~

温馨提示:答案为网友推荐,仅供参考