把在C语言学习过程的知识记录下来,积少成多。
1、各种特殊字符
\n 换行 ;\r 输出指针移到当前位置 ;\b 去掉一个前面的字符 ;\t 制表对齐 ;\f 换页符
2、常用函数
menset(char[],0,100);//数组置0
strcat(dis,res);//字符串的拼接
strncat(dis.res,n);//字符串的个数拼接
ssprintf(dis,"format",p1,p2);//字符串的组合
sscanf(dis,"format",p1,p2);//字符串的拆分
atof("3.14");//将string转为int
strcmp(s1,s2);//字符串的比较
字符串的截取
char*c = "my world";
//char*c1 = strchr(c, 'w');//从开始扫描
//char*c1 = strrchr(c, 'w');//从后面扫描
//char*c1 = strstr(c, "wo");//扫描字符串
char*temp = c + 4;//从开始移位
char c1[10];
strncpy_s(c1, temp, 3);
3、可变参数函数的应用
int sum(int n, ...){
int all=0;
va_list varlist;
va_start(varlist, n);
for (int i = 0; i < n; i++){
all += va_arg(varlist, int);
}
va_end(varlist);
return all;
}
4、宏函数的参数连接
(1)#define callcqyd(NAME) cqyd##NAME()
(2)void cqydSayyes(){
printf("cqydSayyes");
}
(3)callcqyd(Sayyes);
5、宏函数的定义和使用
(1)#define max(a,b) a>b?a:b
printf("the max number is:%d\n",max(3,9));
(2)#define Loop(Min,Max,Content) \
for (int index = Min; index < Max; index++){\
Content; \
}\
Loop(5, 15, printf("the now num is %d\n",index));
6、宏函数的可变参数
#define Log(Level,Format,...) printf(Level);printf(Format,__VA_ARGS__)
#define Log_E(Format,...) Log("Error:",Format,__VA_ARGS__)
#define Log_W(Format,...) Log("Warn:",Format,__VA_ARGS__)
Log_E("your shouble be:%s and %d ", "happy", 100);
Log_W("your shouble not be:%s and %d ", "bad", 0);
7、指针函数
typedef void(*T)();
void(*p)() = &cqydSayyes;
T p = &cqydSayyes;
p();
8、无类型指针
void*j = malloc(8);
int *q = (int*)j;
printf("%ld", sizeof(q[0]));
free(j);
9、结构体的创建
struct File
{
int size;
char*name;
};
typedef struct File MyF;
typedef struct Person
{
char*name;
int age;
}MyP;
int main(){
/*MyF file;
file.name = "check";
file.size = 100;
printf("File:%s,%d\n",file.name,file.size );*/
MyP p;
p.age = 12;
p.name = "duzi";
printf("Person:%d,%s\n",p.age,p.name);}
10、结构体指针
MyF *createFile(char*name,int size){
MyF*f = (MyF*)malloc(sizeof(MyF));
f->name = name;
f->size = size;
return f;
}
void deleteFile(MyF*f){
free(f);
}
MyF* myFile = createFile("newFile",100);
printf("File:%s,%d",myFile->name,myFile->size);
deleteFile(myFile);
11、共同体
typedef union _Base{
char c;
int i;
}Base;
Base b;
b.c = 'a';
//b.i = 64;
printf("%d", sizeof(b));
12、不按字节对齐
typedef struct Person
{
char*name;
int age;
}__attribute__((packed)) MyP;
13、文件操作
(1)、写入
FILE*file=fopen("data.txt","w");
//fputc('A',file);
fputs("jiayou duzi",file);
fclose(file);
(2)、读取
FILE*f=fopen("data.txt","r");
char c[20];
fgets(c,50,f);
printf("%s",c);
(3)格式化的读取和写入
FILE*f = fopen("my.txt", "w");
int i = 0;
for (i = 0; i < 5; i++) {
fprintf(f, "Item is : %d\n", i);
}
fclose(f);
FILE*f = fopen("my.txt", "r");
if (f != NULL) {
//char cs[20];
int n;
fscanf(f, "Item is : %d\n", &n);
printf("read is %d", n);
fclose(f);
} else {
puts("wrong");
}