[笔记]C语言中字符串的存储 | 祭夜の咖啡馆
  • 充值系统已开放,修复了一些BUG

  • 各项服务恢复正常

  • 修复在线人数的显示

  • 修复了Baidu与Github登陆的小Bug

  • 优化网站整体代码布局,提高速度

[笔记]C语言中字符串的存储

猿之力 祭夜ゐ 3周前 (09-24) 44次浏览 已收录 0个评论 扫描二维码
char a[10]; //一维字符数组
char b[5][10]; //二维字符数组
char c[20]={'c', ' ', 'p', 'r', 'o', 'g', 'r', 'a','m'}; // 给部分数组元素赋值
char d[]={'c', ' ', 'p', 'r', 'o', 'g', 'r', 'a', 'm' }; //对全体元素赋值时可以省去长度

C语言规定,可以将字符串直接赋值给字符数组,例如:

char str[30] = {"abcde"};
char str[30] = "abcde"; //这种形式更加简洁,实际开发中常用

但是,需要注意的是在C语言中"a"相当于'a''\0'的组合
所以

char ch[3] = "ab";  //正确
char ch[3] = "abc";//不正确,报错

在C语言中,字符串总是以’\0’作为串的结束符。
比较如下语句

char ch[3] = {'a', 'b', 'c'}; //不报错,但是输出abc的后面会有乱码
char ch[3] = {'a', 'b'}; //不报错,但是输出ab的后面会有乱码
char ch[3] = {'a', 'b', '\0'}; //不报错,输出abc

发现,如果以数组形式手动的一个个字符地赋值,结束符\0是不可缺少的。

 

补充:

用字符串给字符数组赋值时由于要添加结束符 ‘\0’,数组的长度要比字符串的长度(字符串长度不包括 ‘\0’)大1。例如:

char str[] = "C program";

该数组在内存中的实际存放情况为:
[笔记]C语言中字符串的存储
字符串长度为 9,数组长度为 10。

'\0'是ASCII码表中的第0个字符,用NULL表示,称为空字符。该字符既不能显示,也不是控制字符,输出该字符不会有任何效果,它在C语言中仅作为字符串的结束标志。

运行如下程序

#include 
int main(){
int i;
char str1[30] = "abcde";
char str2[] = "C Language";
char str3[30] = "You are a good\0 boy!";
printf("str1: %s\n", str1);
printf("str2: %s\n", str2);
printf("str3: %s\n", str3);
return 0;
}

输出

str1: abcde
str2: C Language
str3: You are a good

str1 和 str2 很好理解,编译器会在字符串最后自动添加 '\0',并且数组足够大,所以会输出整个字符串。对于 str3,由于字符串中间存在 '\0',printf() 扫描到这里就认为字符串结束了,所以不会输出后面的内容。


祭夜blog , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:[笔记]C语言中字符串的存储
喜欢 (0)
[1690127128@qq.com]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址