C语言指针习题

main()
{
char *p1,*p2,str[50]="ABCDEFG";
p1="abcd";
p2="efgh";
strcpy(str+1,p2+1);
strcpy(str+3,p1+3);
printf("%ds",str);
}
求高手帮忙分析结果啊,不要只有结果啊。

main()
{
char *p1,*p2,str[50]="ABCDEFG";
p1="abcd";//p1指针指向字符串abcd的首地址
p2="efgh";//p2指针指向字符串efgh首地址
strcpy(str+1,p2+1);//指针移一位所指的字符串fgh 复制到 str[1]这个位置(从这个位置开始往后覆盖) 即AfghEFG
strcpy(str+3,p1+3);//指针移三位所指的字符串d 复制到str[3]这个位置 即AfgdEFG
printf("%s",str);//打印字符串 你上面写的错了 字符串的转义字符时%s 不是%ds 而且你那个是数组 最好用循环打印出来比较好
}
答案是:Afgd

//while(i<strlen(str))
{
printf("%c",str[i]);
i++;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-02-05
最后打印出str的地址+字母's'
str地址没有变过。

char *p1,*p2,str[50]="ABCDEFG";
p1="abcd";将“abcd”首地址赋值给p1,也就是将p1指向字符串“abcd”,
p2="efgh";将“efgh”首地址赋值给p2,也就是将p2指向字符串“efgh”,
strcpy(str+1,p2+1);p2+1指向的字符串“fgh”复制到str+1,这一句执行完后str指向的字符串为:“Afgh”
strcpy(str+3,p1+3);p1+3指向的字符串“d”复制到str+3,执行完后str变为:“Afgd”
printf("%ds",str);十进制打印出str地址。

感觉你想答应出str字符串
把d去掉printf("%s",str);结果为:“Afgd”
第2个回答  2010-02-05
赋值就不说了
从strcpy开始
第一句是将p2+1开始直到结束符的内容赋给str
所以第一句完了,str应该是
Afgh(0) //strcpy是要复制结束符的,所以也复制了p2的结束符p2="efgh"0
第二句完了str是
Afgd(0) //同理

输出的时候因为是%d 模式就是指以数字的形式输出字符串,%d后面还有一个s,则输出的是str的数字形式加上一个字符s,最后结果就应该是1244996s

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网