1、C语言的缓冲区会带来一些负面影响
-
fflush(stdout); //本次输出结束后立即清空输出缓冲区 int c; while((c = getchar()) != '\n' && c != EOF);//使用 getchar() 清空输入缓冲区 scanf("%*[^\n]"); scanf("%*c"); //在下次读取前清空输入缓冲区
2、scanf的高级用法
-
scanf("%2d", &n);//表示最多读取两位整数 char str[30]; scanf("%[abcd]", str);//表示只读取字符abcd scanf("%[a-zA-Z]", str); //只读取字母 scanf("%[^0-9]", str1);//表示读取除0-9以外的所有字符 scanf("%[^\n]", str2);//读取一行字符串,即代替gets()函数功能,能够读取带空格的字符串 /* %*d表示读取一个整数并丢弃; %*[a-z]表示读取小写字母并丢弃; %*[^\n]表示将换行符以外的字符全部丢弃。 */
3、在用 gets() 函数读取字符串的时候,有一些编译器会提示不安全,建议替换为 gets_s() 函数,就是因为 gets() 不能控制读取到的字符串的长度,风险极高。
4、字符数组与指针字符串的区别:在内存中的存储区域不一样,字符数组存储在全局数据区或栈区,指针字符串存储在常量区。字符数组在定义后可以读取和修改每个字符,而对于指针字符串(字符串常量),一旦被定义后就只能读取不能修改。
5、判断大小端
1) 大端模式(Big-endian)是指将数据的低位(比如 1234 中的 34 就是低位)放在内存的高地址上,而数据的高位(比如 1234 中的 12 就是高位)放在内存的低地址上。
2) 小端模式(Little-endian)是指将数据的低位放在内存的低地址上,而数据的高位放在内存的高地址上。
通过共同体判断
#include <stdio.h>
int main(){
union{
int n;
char ch;
} data;
data.n = 0x00000001; //也可以直接写作 data.n = 1;
if(data.ch == 1){
printf("Little-endian\n");
}else{
printf("Big-endian\n");
}
return 0;
}