分类: C/C++
2011-04-10 09:21:38
字符数组与字符串是有区别的,字符串是字符数组的一种特殊形式,存储时以“\0”结束,所以,存放字符串的字符数组其长度应比字符串大1。对于存放字符的字符数组,若未加“\0”结束标志,只能按逐个字符输入输出。
//字符数组的正确使用方法。
//字符串=%s的话要以\o结束
//字符=%c的话可不以\o结束
#include
main()
{
char str[10],*p=str;
int i;
scanf("%s",str);/*输入的字符串长度=10*/
for(i=0;i<10;i++)
printf("%c",*p++);/*正确输出*/
printf("\n");
p=str;
printf("%s",p);/*字符数组无'\0'标志,输出出错*/
puts(str);/*字符数组无'\0'标志,输出出错*/
}
程序运行:
输入:asdfasdfgh\o
输出:asdfasdfgh
asdfasdfgh\o
asdfasdfgh\o
字符数组以字符串形式输出,若无“\0”标志,则找不到结束标志,输出出错。
//用指向字符串的指针变量处理两个字符串的复制。
//字符串的复制要注意的是:若将串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);
}
程序运行:
inputstr1:qqqqqq\o
inputstr2:zzzz\o
str1------------str2
qqqqqq\o.......zzzz\o
str1------------str2
zzzz\o.......zzzz\o
//串连接时,串1的长度应大于等于串1与串2的长度之和。
printf("%s.......%s\n",str1,str2)替换为printf("%s.......%s\n",ptr1,ptr2);
//用指向字符串的指针变量处理两个字符串的合并。
#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);
}
运行结果:
inputstr1:qqqqq
inputstr2:aaaaaaaa
str1------------str2
qqqqq.......aaaaaaaa
str1------------------str2
qqqqqaaaaaaaa.......aaaaaaaa