/*定义一个字符数组,对它初始化,然后输出该字符串*/
#include<stdio.h>
void main(){
char string[]="i love you";
printf("%s\n",string);//string 是数组名,它代表字符数组的首地址
printf("%c\n",string[4]);string[4]代表数组中序号为4 的元素
printf("%c\",*(string+4));
}
/*定义字符串指针*/
#include<stdio.h>
void main()
{
//char *string="i love you";
char *string;
string="i love you"; //*string = "i love you";是错的
printf("%s\n",string);
}
备注:%s是指以字符串的格式输出,在输出项中给出字符指针变量名string,则系统先输出他所指向的一个字符数据,然后自动使string+1,知道遇到'\0'结束,字符串的最后会自动加'\0';注意:对于int a[10] ...printf("%d\n",i);是不行的
/*复制a到b*/
#include<stdio.h>
void main()
{
char a[]="i am a boy", b[20];//b的空间要大于a
int i;
for(i=0;*(a+i)!='\0';i++)//注意和下面红色的差别
*(b+i)=*(a+i);
*(b+i)='\0';
printf("string a is:%s\n",a);
printf("string b is:");
for(i=0;b[i]!='\0';i++)
printf("%c",b[i]);
printf("\n");
}
备注:对于这个程序的主要是对‘\n’的处理
等价的一个linux的
/*用指针变量来处理*/
/*复制a到b*/
#include<stdio.h>
void main()
{
char a[]="i am a boy", b[20],* p1,* p2;
p1=a;
p2=b;
int i;
for(;*p1!='\0';p1++,p2++)
*p2=*p1;
* p2='\0';
printf("string a is:%s\n",a);
printf("string b is:");
for(i=0;b[i]!='\0';i++)
printf("%c",b[i]);
printf("\n");
}
/*形参用字符指针表示*/
#include<stdio.h>
void main()
{
void copy_string(char * from,char * to);
char from[]="i am a teacher";
char to[]="you are a student";
char * a =from, *b=to;
printf("string a =%s\nstring b=%s\n",a,b);
printf("copy string a to string b");
copy_string(a,b);
printf("\string a=%s\nstring b= %s\n",a,b);
}
void copy_string(char * from,char * to)
{
for(; *from!='\n';from++,to++)
* to = *from;
* to ='\n';
}
***********************************************************************
对于copy_string函数的简化
***********************************************************************
1 void copy_string(char * from, * to)
{
while((*to=*from)!='\0')
{to++;from++}
}
2 while((*to++=*from++)!='\0')
3 {
while(*from!='\0');
*to++=*from++;
*to='\0';
}
4 {
while(*from)
{
*to++=*from++;
*to='\0';
}
}
4(简化)while(*to++=*from++)
while((*to++=*from++)!='\n')
5 for(;*to++=*from++;)
6 也可以使用指针做变量
void copy_string(char from[],char to[])
{
char *p1,*p2;
p1=from;p2=to;
while((*p2++=*p1++)!='\0')
}
字符指针变量和字符数组
字符指针变量赋值
char *a;
a="ni hao";
char *a="nihao"
字符数组
char a[5]={"nihao"};
错误的赋值: char a[5]; a[]={"nihao"}
char str[10];
scanf("%s",str);
是正确,但是下面的是错误的
char *a;
scanf("%s",a);
原因是对于指针变量a没有分配内存
char *a,str[10];
a=str;
scanf("%s",a);
/*改变指针变量的值*/
#include<stdio.h>
void main()
{
char * a=" i love china!";
a=a+7;
printf("%s\n",a);
printf("%c\n",a);
}
--------------------参考书目《C程序设计》第三版 谭浩强