下面程序段的运行结果是( )。 char *p="abcdefgh"; p+=3; printf("%d\n",strlen(strcpy(p,"ABCD")

答案是4,为什么不是7. "abcABCD"???急

我也不知道,身边也没有c的编译器,网上看了看。首先strcpy(p,"ABCD")这句是说。将ABCD赋值个p,他们之间是怎么赋值的呢,让p指针指向“A”的地址,如果取值的话就*P拿到A了。这个函数返回的值是目标串的地址,也就是p啦,那么p是个指针怎么算地址的长度呢,其实就是strlen("ABCD")啦,为什么,计算机知道的啦,因为p指向了“ABCD”首地址了,而c语言中默认在ABCD后加个结束符的,所以答案就是4了。
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2018-03-01
halps 说得有道理

strcpy的实现代码
char * strcpy(char * strDest,const char * strSrc)
{
char * strDestCopy=strDest; //[3]
if ((strDest==NULL)||(strSrc==NULL)) //[1]
throw "Invalid argument(s)"; //[2]
while ((*strDest++=*strSrc++)!='\0'); //[4]
return strDestCopy;
}

函数把‘\0’也拷贝进去了的,而strlen也是取得‘\0’之前的追问

p+=3不是使指针指向了第三个c后面,那复制不是应该从c之后开始复制吗?

追答

p+=3之后,*p应该就是指向defgh\0了,复制之后变成ABCD\0

本回答被提问者和网友采纳
第2个回答  2013-09-18
strlen函数是检查'\0'作为结束符,strcpy后*p的值应该是“ABCD\0fgh”
第3个回答  2013-09-18
p+=3后 *p为defgh strcpy 拷贝ABCD给指针p 覆盖原来数据
第4个回答  2018-07-11
p+=3使指针p指向字符"d",函数strcpy的功能是把后面的字符串复制到p指针指向的空间,即将"ABCD"复制到指针P指向的地址,此时p="ABCD";strlen函数的功能是求字符串的长度,并返回字符个数,不计最后的"\0"。本题结果为4,即字符串“ABCD”的长度。

...char *p="abcdefgh"; p+=3; printf("%d\\n",strlen(strcpy(p...
首先strcpy(p,"ABCD")这句是说。将ABCD赋值个p,他们之间是怎么赋值的呢,让p指针指向“A”的地址,如果取值的话就*P拿到A了。这个函数返回的值是目标串的地址,也就是p啦,那么p是个指针怎么算地址的长度呢,其实就是strlen("ABCD")啦,为什么,计算机知道的啦,因为p指向了“ABCD”首地址了,...

char *p="abcdefgh"; p+=3; printf("%d\\n",strlen(strcpy(p,"ABCD...
strcpy是复制字符串,将逗号后面的字符串复制到逗号前指针所指向的位置。所以P中存储的是ABCD4个字符返回字符串长度4(不计行尾符)。

char *p="abcdefgh";p+=3;printf("%d\\n",strlen(strcpy(p,"ABCD...
因为ABCD后面有\\0,\\0是结束字符,后面的所以是4,即strlen("ABCD");

...char c[]="\\t\\v\\\\\\0will\\n" printf("%d",strlen);
char c[]={'\\t','\\v','\\\\','\\0','w','i','l','l','\\n','\\0'};所以输出应该是3 strlen这个函数是遇到'\\0'就结束。

有点蒙了,char *p="abcdefgh",sizeof(p)居然是4我记得应是字符串的...
sizeof(p)的时候是对char *这样一个指针类型进行sizeof,当然是4。字符串长度用strlen。或者char [n]的时候可以用sizeof。

急!!历年国家计算机二级c语言笔试真题答案。
C)6 3 D)7 1 (24)有以下程序 #include<stdio.h> Int f(int x); main() {int n=1,m; m=f(f(f(n)));printf(”%d\\n”,m); } int f(int x) {return x*2;} 程序运行后的输出结果是 A)1 B)2 C)4 D)8 (25)以下程序段完全正确的是 A)int *p; scanf("%d",&p); B)int *p...

全国计算机等级考试二级C语言历年试题及答案
这里有一份最全的考研历年真题资料分享给你 链接: https:\/\/pan.baidu.com\/s\/1t0SUkI-X-BW4v7Isl0dk4w 提取码: w2wt 通过不断研究和学习历年真题,为考生冲刺阶段复习提分指点迷津,做真题,做历年真题集,对照考纲查缺补漏,提高实战素养,制定做题策略,规划方向;若资源有问题欢迎追问!

计算机基础模拟题一,答案?
printf(“NO%d:%f\\n”,n,ave); }}上述程序运行后结果不正确,调试中发现有一条语句出现在程序中的位置不正确。这条语句是( )。A) sum=0.0; B) sum+=score;C) ave=sun\/4.0; D) printf(“NO%d:%f\\n”,n,ave); (25) 有以下程序段int n=0,p;do{scanf(“%d”,&p);n++;}while(p!=12345 ...

各位大哥哥大姐姐,谁有全国计算机二级java考试真题及答案,急,急...
16) 下面程序段的运行结果是( C )。 char c[]="\\t\\v\\\\\\Owill\\n"; printf("%d",strlen(c));A、14B、3C、9D、字符串中有非法字符, 输出值不确定17) 判断字符串a和b是否相等, 应当使用( D )。A、if (a==b)B、if (a=b)C、if (strcpy(a,b))D、if (strcmp(a,b))18) 以下程序存...

下半年计算机二级c语言基础试题
3. 有以下程序段 char acArr[]= "ABCDE"; char *pcPtr; for(pcPtr = acArr; pcPtr < acArr + 5; pcPtr++) { printf("%s\/n", pcPtr); } return; 输出结果是( ) A) ABCD B) A C) E D) ABCDE B D BCDE C C CDE D B DE E A E 答案:D 4.在中断中,不能同步获取信号量,但是...

相似回答