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++;
}
{
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”
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
从strcpy开始
第一句是将p2+1开始直到结束符的内容赋给str
所以第一句完了,str应该是
Afgh(0) //strcpy是要复制结束符的,所以也复制了p2的结束符p2="efgh"0
第二句完了str是
Afgd(0) //同理
输出的时候因为是%d 模式就是指以数字的形式输出字符串,%d后面还有一个s,则输出的是str的数字形式加上一个字符s,最后结果就应该是1244996s