字符常量,字符变量,字符数组,字符串常量,字符串指针

字符常量:如'a'
特殊字符常量:如'/n'
字符变量:char c1 = 'a', c2; c2 = 'c'; c2 = 130; int i = c1;
一个字符数据在内存中占一个字节。
将一个字符常量放到一个字符变量中,实际上并不是把该字符本身放到内存单元中去,而是将该字符的相应的ASCII代码放到存储单元中。
printf("%c", c1); 先转换成相应字符,然后输出。
printf("%d", c1); 输出该字符的ASCII码。
可以对字符数据进行算术运算。
signed char: -128 - 127; unsigned char: 0 - 255
signed char 和 unsigned char 的含义及用法与signed int 和 unsigned int 相仿,但char 只有一个字节。

用一个字符数组来存放字符串。
字符串常量,如"a" 在内存中实际占两个字节 a 和  /0 。
------------------------------------------------------------------------------------------------------

字符数组的定义和初始化:
char c[5]; c[0] = 'H', ...若不主动赋给数组一个'/0', 系统不会自动添加'/0'。
---定义为int c[5];也合法,但是这样定义对于字符数组来说会浪费很多空间。
char c[5] = {'H', 'e', 'l', 'l', 'o'}; 如果花括弧中提供的初值个数大于数组长度,则按语法错误处理。如果小于数组长度,则其余的元素自动定为空字符/0。如果等于

数组长度,则数组中午'/0'。
char c[] = {'H', 'e', 'l', 'l', 'o'}; 可以省略数组长度,但是这种情况下数组中没有'/0'。
char c[] = {"Hello"}; 或 charc[] = "Hello"; 数组长度为6,带有'/0'。

无空字符'/0'的缺点:
puts, printf, strcpy等操作, 总是要遇到空字符才会停止,从而发生不可预知的错误。

1.
char user_name[5] = {'H', 'e', 'l', 'l', '/0'};
char test[K];
strcpy(test, user_name);  --- 查MSDN,strcpy的实现代码

printf("%s", user_name);
如果K<5,没有任何字符被打印出来。

printf("%s", test);
如果K<5,Hell也会被打印出来。

2.
char user_name[5] = {'H', 'e', 'l', 'l', 'o'};
缺点:在该数组中无空字符'/0'
char test[K];
strcpy(test, user_name);

printf("%s", user_name);
如果K<5,o烫汤 被打印出来。
如果k>=5, ? 被打印出来。

printf("%s", test);
无论k为何值,Hello烫汤 会被打印出来。

3:
char user_name[5];
scanf("%s", user_name);
如果运行时输入的字符大于5个,exe程序会弹出:遇到问题,需要关闭。
---如果利用一个scanf函数输入多个字符串,则以空格分离。


字符串处理函数:
1. puts(字符数组名或字符串常量);遇到空字符'/0'才结束。
2. gets(字符数组名)
3. strcat(字符数组名,字符数组名或字符串常量)  遇到空字符'/0'才结束。
char user_name[10] = {'H', 'e', 'l', 'l', 'o'};
char test[2] = {'w', 'o'};
strcat(user_name, test);
puts(user_name);无任何东西输出
puts(test);无任何东西输出
4. strcpy(字符数组1, 字符数组2或字符串常量)--- 见上
5. strcmp(字符数组或字符串常量,字符数组或字符串常量) --- 字符串比较函数
6. strlen(字符数组或字符串常量) ---求字符串长度函数
7. strlwr(字符数组)把字符数组中的大写字符转换为小写字母。
8. strupr(字符数组)把字符数组中的小写字符转换为大写字母。
------------------------------------------------------------------------------------------------------

字符串指针的定义和初始化:
char *string = "I love china";
或者:
char *string;
string = "I love china";

string 仅仅存储一个字符串的首地址。

可以使用的运算,string++, *string:取某一元素值

字符串指针和字符数组名可做函数参数。

定义一个字符数组,在编译时为它分配内存单元,它有确定的地址。而定义一个字符指针变量,在其中可以存放一个字符变量的地址。
char str[10]; scanf("%s", str); 这是可以的。
char *a; scanf("%s", a); 这是不允许的。因为虽然&a 已经被分配了,但是 a 的值没有被指定。
可以这样。char *a; a = str; scanf("%s", a); a 不局限于10个单元。
指针变量的值是可以被改变的。
可以用下标形式引用指针变量所指的字符串中的某个字符。
------------------------------------------------------------------------------------------------------

指针加减 与 地址加减 不同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值