#define
#define SOS(x) \ printf("SOS\n"); \ do_something(x); 将宏所定义的多条表达式放在大括号中 #define SOS(x) { \ printf("SOS\n"); \ do_something(x); } for (int index = 0; index < SIZE; index++) SOS(index) if (1 == age) SOS(age); else SOS(10); 结果还是不能正确使用 #define SOS(x) do { \ printf("SOS\n"); \ do_something(x); } while(0)
#include <stdio.h> #include <malloc.h> void main() { int* p = malloc(-1); *p = 1; //printf("size:%lu\n", ); }
调用格式化I/O函数时,不要直接或者间接将用户输入作为格式化字符串的一部分或者全部
printf(input); //不允许将用户输入直接作为格式字符串
printf(“%s”, input); //推荐的方式
sprintf( buffer, "Usage: %s argument\n", argv[0] );
sprintf(buffer, "Usage: %.100s argument\n", argv[0]); //字符串加上精度说明符:最多只能拷贝100个字符,防止缓冲区溢出

浙公网安备 33010602011771号