1字符串常量
这是无法修改的,如
char * p ="abcdef";
无法通过指针来修改字符串的值
*p='d'; /*wrong*/
2字符串常量可以用字符数组存储,字符数组是可以修改的
char arr[]="abcdef";
arr[1]='d'; /*这是合法的*/
3取下标方式
char * p ="abcdef";
char arr[]="abcdef";
char str =*p[2];
char str ="abcdef"[2];
char str = arr[2];
4 字符数组和字符指针
char arr[]="abcdef";//声明一个字符数组
char * p ="abcdef";//声明一个字符指针
正因为有了数组和指针之间的紧密关系,才使上面这两个声明 都可以用作字符串。任何期望传递字符数组或字符指针的函数都能够接收这两种声明 作为参数。
注意:需要注意,不能错误地认为上面这两种可以互换,两者之间有很大的差异
5 字符串常用函数
printf(“%s”,arr);//显示字符串
scanf(“%s”,arr);//读入字符串
strcpy字符串复制
strcpy(str2, "abcd");//把abcd拷贝到str2中;
strlen求字符串长度
len = strlen(strl);//str一定要用'\0'结尾
strcat 函数(字符串拼接)
strncat(str1, str2, sizeof(str1) - strlen(str1) - 1) ;//把str2拼接到str1后面
strcmp函数(字符串比较)
if (strcmp(str1, str2) < 0) /* is str1 < str2? */
6字符串几种惯用法
1)模拟strlen搜索字符串结尾,s为字符串指针
size_t strlen(const char *s)
{
const char *p = s;
while (*s) s++;
return s - p;
}
2)模拟strcpy字符串复制
char *strcat(char *s1, const char *s2)
{
char *p = s1;
while (*p) p++;
while (*p++ = *s2++)
;
return s1;
}
7字符串数组
可以用字符串建立数组
char planets[][8] = {"Mercury", "Venus", "Earth",
"Mars", "Jupiter", "Saturn",
"Uranus", "Neptune", "Pluto"};
char *planets[] = {"Mercury", "Venus", "Earth",
"Mars", "Jupiter", "Saturn",
"Uranus", "Neptune", "Pluto"};
上面是planets 数组的另外一种写法,这次把它看成是指向字符串的指针的数组:
planets 的每一个元素都是指向以空字符结尾的字符串的指针。虽然必须为planets 数组中的指针分配空间,但是字符串中不再有任何浪费的字符。