C语言笔记 常变量 符号常量 字符数组与字符串 字符串处理函数 strlen与sizeof区别

C语言些许回顾:

  1. C99允许常变量,如const int a =3,常变量具有变量属性:有类型,占存储单元,只是不允许改变其值,即有名字的不变量,而常量是没有名字的不变量
  2. 符号常量用#define指令,在预编译是仅进行字符替换,预编译后,符号常量就不存在了(如#define Pi 3.14;Pi全置换为3.14),对符号常量的名字是不分配内存的。
  3. 字符型数据以整型形式(ASCII码)存放,也可以用整型数组存放,占1个字节(8位,字节首位置为0)
  4. C系统在用字符数组存放 字符串常量时自动加一个'\0'作为结束符。
a.char c1[] ={"I am happy"};//同char c[] ="I am happy";
b.char c2[] = {'I',' ','a','m',' ','h','a','p','p','y','\0'};
c.char c3[] = {'I',' ','a','m',' ','h','a','p','p','y'};
d.char c4[10] = "China"; 

系统自动在字符串常量后加’\0’,所以上述代码:

  1. a、b等价,长度为11
  2. c长度为10
  3. d长度为10(静态内存分配),前5个元素存放单个字符,第6个元素存放’\0’,
    后4个自动设为空(null)字符,以'\0'表示
    为了使处理方法一致,便于测定字符串实际长度以及相关处理,在字符数组中常常人为加入一个’\0’。代码相关案例
  4. 字符串末尾加'\0'作用:若使用新字符串代替旧字符串,c1 再输入’HE’,不加’\0‘,存放为H E a m 空格字符 h a p p y \0,输出:HEam happy
    加’\0’,存放:H E \0 m 空格字符 h a p p y \0,输出:HE
  5. c语言中printf(“%s”,c4);,只输出有效字符“China”,遇到’\0‘结束输出,而不是输出10个字符。
  6. c语言中使用scanf输入多个字符串时,以空格分开。
char str1[5],str2[5],str3[5];
scanf("%s%s%s",str1,str2,str3);

输入: How are you?
以空格字符分隔,作为3个字符串输入,存储状况如下:

str1:H o w \0 \0
str2:a r e \0 \0
str3:y o u  ? \0

若改为char str[13]; scanf("%s",str);系统以空格字符为分隔符,所以只存放字符串“How”,然后在其后加“\0”
H o w \0 \0 \0 \0 \0 \0 \0 \0 \0 \0

7.C语言字符串处理函数,#include<string.h>
  • puts(字符数组)
    可输出一个字符串中包含转义字符,如:
输入:
char str[] = "China\nBeijing";
puts(str);
输出:
China
Beijing

puts输出时将’\0’转换成’\n’,即输出完字符串后换行。

  • gets(字符数组)获取终端一个字符串到字符数组

  • strcat(字符数组1,字符数组2)
    将字符串2接到字符串1的后面,结果放在字符数组1中,返回字符数组1的地址。

  • strcpy(str1,str2/字符串常量)
    如:strcpy(str1,“China“);取代str1中前6个字符(如果str1未初始化或赋值,第6字符(为’\0’)后面的字符是str1原有的字符)。
    strncpy(str1,str2,n) n为控制复制字符的个数

  • strcmp(字符串1,字符串2)自左向右逐个比较(按ascii码值大小比较,直到出现不同字符或’\0‘为止)

  • strlen(字符数组)
    返回字符串实际长度不包括'\0'

建议: 获得字符串的长度,推荐使用 strlen
sizeof 返回获取的数据类型在内存中所占用的存储空间大小
char arr[10] = “abcde”; cout<<sizeof(arr)<<endl;
//sizeof输出10 静态分配给数组的内存空间的大小
//strlen输出5 字符串实际长度
代码相关案例

  • strlwr(字符串)将大写字母转小写
  • strupr(字符串)将小写字母转大写
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值