蒋迪的博客
| 关于 | 归档

#C语言 C语言陷阱记录

一些工作和学习中遇到的C语言的陷阱。

字符串类型问题

Trap1-scanf,getchar和gets

材料引用:

  1. 深入了解scanf() getchar()和gets()等函数
  2. scanf(),getchar(),gets()区别与用法

Trap2- sizeof 和 strlen

sizeof() 返回所占空间的字节数。且在编译时就计算好大小。

strlen()返回字符串的实际字符长度,以\0为字符串结束。

材料引用:

  1. Difference between strlen() and sizeof() for string in C
  2. 关于 strlen 与 sizeof 的区别
  3. sizeof和strlen的区别
  4. 聊点基础的–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);

引用材料: