一、字符串函数
C标准库:string.h。
1、strlen函数——计算字符串长度
函数定义:
size_t strlen(const char *_Str);
strlen(字符串a)函数计算字符串长度,包括空格和转义字符。
示例:
#include <stdio.h>
#include <string.h>
char a[] = "Hello World\n";
int x;
int main()
{
x = strlen(a);
printf("Length x = %d", x);
}
输出打印:
Length x = 12
2、strcpy——复制字符串
函数定义:
char* strcpy(char * __restrict__ _Dest,const char * __restrict__ _Source);
strlen(字符串1,字符串2)函数可以把字符串2中的内容复制到字符串1中。
示例:
#include <stdio.h>
#include <string.h>
char a[] = "Hello World\n";
char x[20];
int z;
int main()
{
strcpy(x, a);
printf("String x = %s", x);
printf("Length z = %lld", strlen(x));
}
输出打印:
String x = Hello World
这里x的长度还是12。
3、strcat——字符串连接
函数定义:
char* strcat(char * __restrict__ _Dest,const char * __restrict__ _Source);
strlen(字符串1,字符串2)函数可以把字符串2和字符串1连接成新的字符串放在字符串1中。
示例:
#include <stdio.h>
#include <string.h>
char a[] = "Hello World\n";
char x[] = "I am back\n";
int z;
int main()
{
strcat(a, x);
printf("String a =\n%s", a);
printf("Length z = %lld", strlen(a));
}
输出打印:
String a =
Hello World
I am back
Length z = 22
4、strcmp——字符串比较
函数定义:
int __cdecl strcmp(const char *_Str1,const char *_Str2);
strlen(字符串1,字符串2)函数可以比较两个字符串是否相同,相同返回
示例:
#include <stdio.h>
#include <string.h>
char a[] = "Hello World\n";
char b[] = "Hello World\n";
char x[] = "I am back\n";
int z, z1, z2;
int main()
{
z = strcmp(a, x);
z1 =strcmp(x, a);
z2 =strcmp(a, b);
printf("z = %d\nz1 = %d\nz2 = %d", z, z1, z2);
}
输出打印:
z = -1
z1 = 1
z2 = 0
二、文件操作函数
C标准库:stdio.h,返回值EOF就是整数-1。
1、fopen——打开文件
函数定义:
FILE *__cdecl fopen(const char * __restrict__ _Filename,const char * __restrict__ _Mode) __MINGW_ATTRIB_DEPRECATED_SEC_WARN;
fopen(文件名,打开模式)函数用来打开一个文件,打开成功返回一个指向该文件的指针*fp,打开失败则返回NULL(打开失败的原因一般是打开模式不对或者文件不存在)。
示例:
#include <stdio.h>
FILE *fp;
int sta;
int main(){
fp = fopen("test.txt", "w+");
if (fp != NULL)
{
sta = fputs("Hello World\nI am back!", fp);
printf("%d\n", sta);
fclose(fp);
}
else
{
printf("文件打开失败");
}
return 0;
}
文件打开模式:
“r”——以“只读”方式打开文件。只允许读取,不允许写入。文件必须存在,否则打开失败。
“w”——以“写入”方式打开文件。如果文件不存在,那么创建一个新文件;如果文件存在,那么清空文件内容(相当于删除原文件,再创建一个新文件)。
“a”——以“追加”方式打开文件。如果文件不存在,那么创建一个新文件;如果文件存在,那么将写入的数据追加到文件的末尾(文件原有的内容保留)。
“r+”——以“读写”方式打开文件。既可以读取也可以写入,也就是随意更新文件。文件必须存在,否则打开失败。
“w+” ——以“写入/更新”方式打开文件,相当于w和r+叠加的效果。既可以读取也可以写入,也就是随意更新文件。如果文件不存在,那么创建一个新文件;如果文件存在,那么清空文件内容(相当于删除原文件,再创建一个新文件)。
“a+”——以“追加/更新”方式打开文件,相当于a和r+叠加的效果。既可以读取也可以写入,也就是随意更新文件。如果文件不存在,那么创建一个新文件;如果文件存在,那么将写入的数据追加到文件的末尾(文件原有的内容保留)。
2、fclose——关闭文件
函数定义:
int fclose(FILE *_File);
fclose(文件指针)函数用来关闭一个文件,关闭成功返回0,关闭失败返回EOF(关闭失败的原因可能是磁盘内存满)。
示例:
#include <stdio.h>
FILE *fp;
int sta, sta1;
int main(){
fp = fopen("test.txt", "w+");
if (fp != NULL)
{
sta = fputs("Hello World\nI am back!", fp);
printf("sta = %d\n", sta);
sta1 = fclose(fp);
printf("sta1 = %d", sta1);
}
else
{
printf("File open failed");
}
return 0;
}
输出打印:
sta = 0
sta1 = 0
3、fputc——写入字符
函数定义:
int fputc(int _Ch,FILE *_File);
fputc(int型字符,文件指针)函数用来向文件写入一个字符写入到文件中,写入成功返回该字符的ASCII值,写入失败返回EOF。
示例:
#include <stdio.h>
FILE *fp;
int sta;
int main(){
fp = fopen("test.txt", "w+");
if (fp != NULL)
{
sta = fputc('M', fp);
printf("sta = %d\n", sta);
fclose(fp);
}
return 0;
}
输出打印:
sta = 77
4、fgetc——读取字符
函数定义:
int fgetc(FILE *_File);
fgetc(文件指针)函数用来读取一个字符,读取成功返回该字符的ASCII值,读取失败返回EOF。
示例:
#include <stdio.h>
FILE *fp;
int sta;
int c;
int main(){
fp = fopen("test.txt", "r");
if (fp != NULL)
{
c = fgetc(fp);
printf("%c", c);
fclose(fp);
}
return 0;
}
这里我们test.txt文件存放的是"Hello World\nI am back!",所以读取到H。
5、fputs——写入字符串
函数定义:
int fputs(const char * __restrict__ _Str,FILE * __restrict__ _File);
fputs(字符串指针,文件指针)函数用来向文件写入一个字符串,写入成功返回0,写入失败返回EOF(写入失败一般原因是模式不对比如只读模式r)。
示例:
#include <stdio.h>
FILE *fp;
int sta, sta1;
int main(){
fp = fopen("test.txt", "w+");
if (fp != NULL)
{
sta = fputs("Hello World\nI am back!", fp);
printf("sta = %d\n", sta);
sta1 = fclose(fp);
printf("sta1 = %d", sta1);
}
else
{
printf("File open failed");
}
return 0;
}
输出打印:
sta = 0
sta1 = 0
6、fgets——读取字符串
函数定义:
fgets (char *__restrict__ __s, int __n, FILE *__restrict__ __stream);
fgets(目标字符串的指针,最大读取数量,文件指针)函数用来读取一个字符串,读取成功返回该字符串,读取失败返回EOF。
示例:
#include <stdio.h>
FILE *fp;
char str[30];
int main(){
fp = fopen("test.txt", "r");
if (fp != NULL)
{
fgets(str, 3, fp);
printf("%s", str);
fclose(fp);
}
return 0;
}
输出打印:
He
这里函数参数最大读取数为n,实际上只会读取n-1个字符输出为字符串,因为会自动将最后一个字符替换为’\0’。
7、fprintf——格式化写入
函数定义:
int fprintf (FILE *__stream, const char *__format, ...);
fprintf(文件指针,写入格式,写入内容)函数用来向文件写入数据,这里用写入一个结构体为例:
其实,printf函数只是将输出流这个参数默认为stdout,如果我们使用fprintf函数时,将第一个参数写为stdout,那它和printf函数的功能是一模一样的。
示例:
#include<stdio.h>
struct Stu
{
char name[20];
int num;
float score;
};
int main()
{
struct Stu s = { "zhangsan",20220405,73.66 };
FILE* pf = fopen("test.txt", "w");//以写的形式打开文件
if (pf == NULL)
{
perror("fopen fail:");
return -1;
}
//将数据写入文件:
fprintf(pf, "%s %d %.2f", s.name, s.num, s.score);
//将写入文件的数据显示在屏幕上:
fprintf(stdout, "%s %d %.2f", s.name, s.num, s.score);
//关闭文件:
fclose(pf);
pf = NULL;
return 0;
}
输出打印:
zhangsan 20220405 73.66
8、fscanf——格式化输出
函数定义:
extern int fscanf (FILE *__restrict __stream,
const char *__restrict __format, ...) __wur;
fscanf(文件指针,输出格式,目标参数)函数用来格式化读取函数,遇到空格和换行时结束。
示例:
#include <stdio.h>
FILE *fp;
int sta;
char buffer[50];
int main(){
fp = fopen("test.txt", "w+");
fputs("Hello World\nI am back!", fp);
fclose(fp);
fp = fopen("test.txt", "r");
sta = fscanf(fp, "%s", buffer);
printf("sta = %d\n", sta);
printf("buffer = %s\n", buffer);
fclose(fp);
return 0;
}
9、fread——读取文件
函数定义:
size_t __cdecl fread(void * __restrict__ _DstBuf,size_t _ElementSize,size_t _Count,FILE * __restrict__ _File);
fread(目标参数指针,单位数据大小,数据个数,文件指针);返回值是数据个数count。
10、fwrite——写入文件
函数定义:
extern size_t fwrite (const void *__restrict __ptr, size_t __size,
size_t __n, FILE *__restrict __s);
fwrite(源数据指针,单位数据大小,数据个数,文件指针);返回值是数据个数count。
注意:
fread / fwrite 函数既可以操作二进制文件 , 又可以操作文本文件 ;
getc / putc 函数 , fscanf / fprintf 函数 , fgets / fgets 函数 , 只能用于操作文本文件 。
11、fseek——移动文件指针
函数定义:
extern int fseek (FILE *__stream, long int __off, int __whence);
int __whence 表示文件指针起始位置:
文件头 SEEK_SET 0;当前位置 SEEK_CUR 1;文件尾 SEEK_END 2
int __off 表示偏移量
如果执行成功 , 则返回 0 , 失败返回非 0 , 并设置 error 错误代码。
示例:
#include <stdio.h>
FILE *fp;
int sta;
char buffer[50];
int main(){
fp = fopen("test.txt", "r");
fseek(fp, 2, SEEK_SET);
fread(buffer, 8, 1, fp);
printf("buffer = %s\n", buffer);
fclose(fp);
return 0;
}
输出打印:
buffer = llo Worl
注意:偏移量offset为正表示向右偏移,为负表示向左偏移。
12、rewind——重置文件指针
函数定义:
extern void rewind (FILE *__stream);
随着文件的读写,文件指针向后移动;rewind(文件指针)函数用来重置文件指针到开头位置。
13、ftell——获取当前文件指针相对于文件首地址的偏移字节数
函数定义:
extern __off_t ftello (FILE *__stream);
ftell(文件指针)函数用来获取当前文件指针相对于文件首地址的偏移字节数。
三、内存管理函数
C标准库stdlib.h
1、malloc——动态申请内存
函数定义:
extern void *malloc (size_t __size);
malloc(size)函数用来申请长度为size字节的内存;返回指向这段内存的指针,如果申请失败则返回空指针NULL(可能内存不足)。
2、realloc——动态申请内存
函数定义:
extern void *realloc (void *__ptr, size_t __size);
realloc(内存指针,size)函数用来在原内存的基础上追加申请总长度为size字节的内存。
3、calloc——动态申请内存
函数定义:
extern void *calloc (size_t __nmemb, size_t __size);
calloc(size)函数用来申请长度为size字节的内存并全部初始化为0。
4、free——释放内存
函数定义:
extern void free (void *__ptr) ;
free(内存指针)函数用来释放malloc、realloc、calloc申请的内存。
注意:
在释放内存后,必须把指针指向 NULL,否则内存指针*p可能会再次被使用导致程序出错。