int main()
{
char string[] = "I love China!";
printf ("%s\n", string);
printf ("%s\n", string + 7);
}
//I love China!
//China!
把s指针中的字符串复制到t指针中的方法
1、while( (*t=*s)!=null ){s++;t++;} 完整版本
2、while( *t=*s ){s++;t++;} 简单版本
3、while( *t++=*s++); 高级版本
/*strcat(s, t) 将t所指向的字符串复制到s所指字符串的尾部,用指针完成*/
void trcat(char *s, char *t)
{
while(*s != '\0')
s++;
while(*t != '\0'){
*s = *t;
t++;
s++;
}
*s = '\0';
}
int main()
{
char s[10] = "yjy";
char t[] = "girl";
trcat(s, t);
printf("%s\n", s);
return 0;
}
char *cp; 与 char str[20];
str由若干元素组成,每个元素放一个字符;而cp中存放字符串首地址
char str[20];
str=“I love China!”; (X)
char *cp;
cp=“I love China!”; (V)
str是地址常量;cp是地址变量
cp接受键入字符串时,必须先开辟存储空间
例:
char str[10];
scanf(“%s”,str); (对)
而:
char *cp;
scanf(“%s”, cp); (错)
改为:
char *cp, str[10];
cp = str;
scanf (“%s”,cp); (对)
字符串与数组的关系
联系:
1、字符串用一维字符数组存放
2、字符数组具有一维数组的所有特点
3、数组名是指向数组首地址的地址常量
4、数组元素的引用方法可用指针法和下标法
5、数组名作函数参数是地址传递等
区别
1、存储格式:字符串结束标志
2、赋值方式与初始化
3、输入输出方式:%s %c
char str[]={“Hello!”}; (V)
char str[]=“Hello!”; (V)
char str[]={‘H’,‘e’,‘l’,‘l’,‘o’,‘!’}; (V)
char *cp=“Hello”; (V)
int a[]={1,2,3,4,5}; (V)
int *p={1,2,3,4,5}; (错)
char str[10],*cp;
int a[10], *p;
str=“Hello”; (对)
cp=“Hello!”; (X)
a={1,2,3,4,5}; (对)
p={1,2,3,4,5}; (对)
如果一个指针没有指向一个有效内存就被引用,则被称为“野指针”操作或空指针赋值。
char str[3][10] = {"Wuhan", "Beijing", "Shanghai"};
char *pstr[3];
pstr[0] = str[0];
pstr[1] = str[1];
pstr[2] = str[2];
char *pstr[3] = {"Wuhan", "Beijing", "Shanghai"};