Chinaunix首页 | 论坛 | 博客
  • 博客访问: 104633485
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: C/C++

2008-04-16 21:49:00

来源:

}
对上述程序中字符数组以字符串形式输出,若无“\0”标志,则找不到结束标志,输出出
错。
[例6-19]用指向字符串的指针变量处理两个字符串的复制。
字符串的复制要注意的是:若将串1复制到串2,一定要保证串2的长度大于或等于串1。
#include
main()
{
char str1[30],str2[20],*ptr1=str1,*ptr2=str2;
printf("inputstr1:");
gets(str1);/*输入str1*/
printf("inputstr2:");
gets(str2);/*输入str2*/
printf("str1------------str2\n");
printf("%s.......%s\n",ptr1,ptr2);
while(*ptr2)*ptr1++=*ptr2++;/*字符串复制*/
*ptr1='\0';/*写入串的结束标志*/
printf("str1------------str2\n");
printf("%s.......%s\n",str1,str2);
}
在程序的说明部分,定义的字符指针指向字符串。语句while(*ptr2)*ptr1++=*ptr2++;先测试表达式的值,若指针指向的字符是“\0”,该字符的ASCII码值为0,表达式的值为假,循环结束,表达式的值非零,则执行循环*ptr1++=*ptr2++。语句*ptr1++按照运算优先级别,先算*ptr1,再算ptr1++。

现在,我们修改程序中语句printf("%s.......%s\n",str1,str2)为printf("%s.......%s\n",ptr1,ptr2);
会出现什么结果呢?请思考。
[例6-20]用指向字符串的指针变量处理两个字符串的合并。
#include
main()
{
char str1[50],str2[20],*ptr1=str1,*ptr2=str2;
printf("inputstr1:");
gets(str1);
printf("inputstr2:");
gets(str2);
printf("str1------------str2\n");
printf("%s.......%s\n",ptr1,ptr2);
while(*ptr1)ptr1++;/*移动指针到串尾*/
while(*ptr2)*ptr1++=*ptr2++;串/*连接*/
*ptr1='\0';/*写入串的结束标志*/
ptr1=str1;ptr2=str2;
printf("str1------------------str2\n");
printf("%s.......%s\n",ptr1,ptr2);
}

需要注意的是,串复制时,串1的长度应大于等于串2;串连接时,串1的长度应大于等于串1与串2的长度之和。
阅读(255) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~