字符串基本操作
- 在C语言中使用字符数组来模拟字符串
- C语言中的字符串是以’\0’结束的字符数组
- C语言中的字符串可以分配于栈空间,堆空间或者只读存储区
1、字符数组初始化
//1 指定长度初始化
char buf2[100] = {'a', 'b', 'c', 'd'};
//如果初始化的个数大于内存的个数 编译错误
//后面的buf2[4]-buf2[99]编译器自动设置为0
//2 不指定长度
char buf1[] = {'a', 'b', 'c', 'd'};
//C编译器会自动求元素的个数
//buf1是一个数组 不是一个以0结尾的字符串
//3 用字符串常量来初始化字符数组
char buf3[] = "abcd";
char buf4[10] = "abcd";
//buf3作为字符数组应该是5个字节
//作为字符串应该4个字节
2、数组法和指针法操作字符串
int i = 0;
char buf5[100] = "abcde";
char *p = NULL;
//下标法
for (i=0; i<100; i++)
{
printf("%c", buf5[i]);
}
printf("\n");
//指针法1
for (i=0; i<100; i++)
{
printf("%c", *(buf5+i));
}
//指针法2
printf("\n");
p = buf5;
for (i=0; i<100; i++)
{
printf("%c", *(p+i));
}
既然数组名buf5实际上是指向首元素的指针,而指针有属于变量,那么是不是可以对buf进行操作呢?(如buf++)
答案显然是不能,因为在c语言中buf被设计成常量指针,只读不写。
为什么要设计成常量指针呢?
因为在程序结束析构内存时,要保证数组空间的全部释放,就不能改变基址的位置。
3、一级指针内存模型
char buf[20]= "aaaa"; //定义并且初始化
char buf2[] = "bbbb";
char *p1 = "111111";
char *p2 = malloc(100);
strcpy(p2, "3333");