一些工作和学习中遇到的C语言的陷阱。
字符串类型问题
Trap1-scanf,getchar和gets
材料引用:
Trap2- sizeof 和 strlen
sizeof()
返回所占空间的字节数。且在编译时就计算好大小。
strlen()
返回字符串的实际字符长度,以\0
为字符串结束。
材料引用:
- Difference between strlen() and sizeof() for string in C
- 关于 strlen 与 sizeof 的区别
- sizeof和strlen的区别
- 聊点基础的–sizeof,strlen,数组,字符串在一起能整哪些坑?
转义字符
转义字符 | 意义 | ASCII码 |
---|---|---|
\b |
退格 | 008 |
\t |
制表位 | 009 |
\n |
换行符 | 010 |
\r |
回车符 | 013 |
%% |
百分号 |
编译问题
编译报错提示
error: pointer targets in assignment differ in signedness [-Werror=pointer-sign]
指针的数据类型不匹配,单词signedness指出数据是否为有符号的意思,也就是数据长度正确,但符号匹配错误。
引用材料:
指针类问题
宏编写类问题
数组类问题
将二维数组当作一维数组操作
/* Usage one */
int a[3][4];
void fun(int *a);
fun(a[0]);
/* Usage two */
int a[3][4];
void fun(int *a);
int *p = a[0];
void fun(p);
引用材料: