//字符串:利用“”包括起来的一系列字符。字符串的末尾有个’\0’,
//’\0’是字符串结尾标记,如果没有’\0’则不是字符串
**注:1.用相同的字符串去初始化不同的数组的时候就会开辟出不同的内存块
2.当指针指向的是同一个常量字符串,C会把常量字符串存储到单独的一个内存区 域,指针指向的是同一块内存;**eg(下面面试题)
int main()
{
char arr[5] = {'a','b','c','d','e'};//不是字符串
char brr[5] = {'a','b','c','d'};//0,'\0'//是字符串
char crr[] = {'a','b','c','d','e'};// 不是字符串,
char drr[10] = "abcdefghi";//字符串
char err[] = "abcde";//6,能修改
char *frr = "abcde";//4 ,不能修改,字符串常量
//printf("%s\n",arr);//error
printf("%s\n",err);
err[0] = 'x';
//frr[0] = 'x';//崩溃,常量不能写
return 0;
}
字符串的操作:
void Mystrcpy(char *des,char *src)
{
int i;
for(i=0; src[i]!='\0'; i++)
{
des[i] = src[i];
}
des[i] = '\0';
}
int main()
{
char str1[100] = "abcde";
char str2[100] = "xyz";
char *str3 = "abcde";
char *str4 = "xyz";
//str1 = str2;//error ,怎么解决
//str1 = "abc";
Mystrcpy(str1,str2);
printf("%s\n",str1);
//str1 += str4;//error
//str1 >str2;//编译能通过,但意思错误
return 0;
}
面试题
#include "stdio.h"
int main()
{
char str1[]="hello bit.";
char str2[]="hello bit.";
char *str3="hello bit.";
char *str4="hello bit.";
if(str1==str2)
printf("str1 and str2 are same\n");
else
printf("str1 and str2 are not same\n");
if(str3==str4)
printf("str3 and str4 are same\n");
else
printf("str3 and str4 are not same\n");
return 0;
}
//输出结果为:str1 and str2 are not same
// str3 and str4 are same
解析:1.用相同的字符串去初始化不同的数组的时候就会开辟出不同的内存块
2.当指针指向的是同一个常量字符串,C会把常量字符串存储到单独的一个内存区域,指针指向的是同一块内存;