首先需要说明的是C语言没有专门存放字符串的数据类型 他们通常被存放在字符数组中 每个内存单元存放一个字符 并且结尾以\0
作为字符串的结束
字符串的创建
char str[]="hello world";
char* str = "hello world"
上面两个等于char str[]={'h','e','l','l','o','w','o','r','l','d','\0'};
会自动补0表示字符串数组的结束
字符串初始化的三种方式
1.先定义,然后逐字符初始化
char str[10];
str[0]='h';
…
str[5]='\0';
2.创建时就赋值初始化
char str[10]="hello";
或
char str[10]={'h','e','l','l','o'};
3.不定义字符数组长度 按初始化数量初始长度
char str[]="hello my name is cvpotato";
字符串在内存中的表示
char str[10] = {'c','v','p','o','t','a','t','o','\0'};
在内存中的表示为
如果初始值的个数小于数组的长度,则只将这些字符赋值给数组中前面的那些元素,其余元素自动赋值为 \0 字符,也就是0;
如果初始值的个数大于数组的长度,则直接报语法错误。
字符数组和字符串的区别
字符数组结尾可以没有0 字符串的结尾必须有0
如果字符初始数量都等于字符数组长度 这时候就不可以作为字符串来使用 强行作为字符串输出会导致访问到其他内存单元
如果用初始化元素来初始化字符数组长度 必须手动加上\0
结束符 否则系统默认不会添加 也就无法作为字符串使用
总结起来就是如果你要把它用作字符串结尾必须是\0
如果没有手动加 系统默认加时 但必须在数组中有足够的空间存放
homework:(选自VC驿站课后题)
char szbuf[100] = "hello, friends, my name is cctry.com. what is your name ?";
遍历字符数组 szbuf,将其中的字符 i 替换成@符号,并统计其个数。最后将统计的个数及整个字符串的内容都输出出来
char szbuf[100] = "hello, friends, my name is cctry.com. what is your name ?";
int j = 0;
int num = 0;
while (szbuf[j]!='\0')
{
printf("%c", szbuf[j]);
if (szbuf[j]=='i')
{
szbuf[j] = '@';
num += 1;
}
j++;
}
printf("i一共出现了%d次\n", num);
printf("替换后的字符串是%s", szbuf);
C++