#include "stdio.h"
#include "stdlib.h"
#include "string.h"
// C语言没有字符串类型
// C语言通过字符数组来模拟字符串
// C风格字符串是以零结尾的字符串 '\0'
void main01() {
// 字符数组初始化
// 指定长度
char buf1[128] = {'a', 'o', 'e'}; // 剩余的部分补充为0
printf("%s\n", buf1); // 结果: aoe
// 不指定具体长度
char buf2[] = { 'a', 'o', 'e' };
printf("sizeof(buf2):%d, buf2 is %s\n", sizeof(buf2), buf2);
/*
* 结果:sizeof(buf2):3, buf2 is aoe烫烫烫烫蘟oe
* buf2 is aoe烫烫烫烫蘟oe 原因是:从buf2地址开始打印,直到遇到0结束。
*/
char buf3[] = { 'a', 'o', 'e', '\0'};
printf("sizeof(buf3):%d, buf3 is %s\n", sizeof(buf3), buf3);
/*
* 结果:sizeof(buf3):4, buf3 is aoe
*/
// 通过字符串初始化字符数组
char buf4[] = "aoe"; // 字符串默认零结尾
printf("sizeof(buf4):%d, buf4 is %s\n", sizeof(buf4), buf4);
printf("sizeof(\"aoe\"):%d, %s\n", sizeof("aoe"), "aoe");
/*
* 结果:
* sizeof(buf4):4, buf4 is aoe
* sizeof("aoe"):4, aoe
*/
system("pause");
}
void main02() {
// 通过字符串初始化字符数组
char buf4[] = "aoe"; // 字符串默认零结尾
printf("sizeof(buf4):%d\n", sizeof(buf4)); // 注意sizeof是对数组类型进行内存大小测量,包括 '\0'
printf("strlen(buf4):%d\n", strlen(buf4)); // strlen是求字符串的长度,不包括\0
/*
* 结果:
* sizeof(buf4):4
* strlen(buf4):3
*/
system("pause");
}
// 操作数组的方法:
// 下标方式法和指针方式法
void main() {
char buf[] = "aoe"; // 在stack栈区分配4*sizeof(char),并初始化为:'a','o','e','\0'
for (int i = 0; i < strlen(buf); i++) {
printf("%c", buf[i]); // 下标方式法
}
char* ptr = NULL;
ptr = buf;
for (int i = 0; i < strlen(buf); i++) {
printf("%c", *(ptr+i)); // 指针方式法
}
// []中括号 *星号的本质到底是什么?
// *ptr 是程序员手工操作。(显示操作)
// [] 是C++编译器帮程序员做了一个*ptr的操作。(隐式操作)
// C++编译器:最终把buf[i] -转换为-> *(buf + i)
// buf[i] --> *(buf + i)
system("pause");
}
C/C++字符串和数组基本操作demo
于 2022-08-13 14:03:14 首次发布