c语言中如何查看fopen创建的文件,typedef以及文件处理fopen系列函数
c语言中如何查看fopen创建的文件,typedef以及文件处理fopen系列函数path就是制定打开文件的路径,可以是相对路径,也可以是绝对路径,mode有以下值:fopen打开文件成功,返回有效file的有效地址,失败返回NULL。#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> #include<stdlib.h> //根据用户输入结构体成员具体数量来输出 struct man { char *name; int age; int classid; }; int main() { struct man* p = NULL;// calloc(10 sizEOF(struct man));//在堆中分配10给man的空间 //for (int i = 0; i < 10; i ) int i = 1; while
1.typefine函数
typedef是一种高级数据特性,它能使某一类型创建自己的名字。
typedef unsigned char BYTE
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
typedef unsigned char BYTE;
struct man
{
char name[20];
BYTE age;
};
typedef struct man M;//M就类似于int,就是一种数据类型了
typedef short SHORT;
int main0901()
{
M m;
m.age = 20;
BYTE a = 0;
SHORT a1;//若想修改大量同类型数据,直接在typedef中修改SHORT
SHORT a2;
SHORT a3;
SHORT a4;
SHORT a5;
return 0;
}
2.在堆空间中处理结构体数组的指针成员
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
//根据用户输入结构体成员具体数量来输出
struct man
{
char *name;
int age;
int classid;
};
int main()
{
struct man* p = NULL;// calloc(10 sizEOF(struct man));//在堆中分配10给man的空间
//for (int i = 0; i < 10; i )
int i = 1;
while (1)
{
printf("please input name:\n");
char temp[1024] = { 0 };
scanf("%s" temp);
//如果用户名字为exit,退出循环
if (strcmp(temp "exit") == 0)
break;
p = realloc(p sizeof(struct man) * i);
p[i-1].name = malloc(strlen(temp) 1);
strcpy(p[i-1].name temp);
printf("please input age:\n");
scanf("%d" &p[i-1].age);
printf("please input classid:\n");
scanf("%d" &p[i-1].classid);
i ;
}
for (int j = 0; j < i - 1; j )
{
printf("%s %d %d\n" p[j].name p[j].age p[j].classid);
}
for (int j = 0; j < i - 1; j )
{
free(p[j].name);//分别释放离散堆空间
}
free(p);//释放堆中连续空间
return 0;
}
输入任意结构体数组成员个数的信息打印结果
3.fopen
file*fopen(const char*path const char*mode);
fopen打开文件成功,返回有效file的有效地址,失败返回NULL。
path就是制定打开文件的路径,可以是相对路径,也可以是绝对路径,mode有以下值:
Mode |
含义 |
r |
以只读方式打开文件,该文件必须存在,文件必须可读。 |
r |
以可读可写方式打开文件,该文件必须存在。 |
rb |
读写打开一个二进制文件,循序读写数据,文件必须存在。 |
rw |
读写打开一个文本文件,允许读写。 |
w |
打开只写文件,若文件存在则文件长度清0,即改文件内容消失,若文件不存在,则创建该文件。 |
w |
打开可读文件,若文件存在则文件长度清0,即该文件内容消失。若文件不存在,则创建该文件。 |
a |
以附加的方式打开只写文件。若文件不存在,则会创建该文件,若存在写入数据会被追加到文件尾,即文件原先内容保留。(EOF符保留) |
a |
以附加的方式打开可读可写文件。若文件不存在,则会创建改文件,若文件存在,写入的数据会被追加到文件尾后,即文件原先内容保留。(EOF符不保留) |
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main0101()
{
char a[] = "F:/a.txt";
FILE* p = fopen(a "r ");
if (p)
{
//printf("success\n");
char c = getc(p);
while(c!=EOF)
{
printf("%c" c);
c = getc(p);
}
fclose(p);
}
else
printf("fail\n");
return 0;
}
int main0102()
{
FILE* p = fopen("F:/a.txt" "w");
if (p)
{
putc('a' p);
putc('b' p);
putc('\n' p);
fclose(p);
}
return 0;
}
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//通过putc写指定文件
int main0201(int argc char** args)
{
if (argc < 2)
return 0;
FILE* p = fopen(args[1] "w");
if (p)
{
while (1)
{
char c = getchar();
if (c == '0')
break;
putc(c p);
}
fclose(p);
}
return 0;
}
//通过getc读指定文件
int main0202(int argc char** args)
{
if (argc < 2)
return 0;
FILE* p = fopen(args[1] "r");
if (p)
{
char c = getc(p);
while (c != EOF)
{
printf("%c\n" c);
c = getc(p);
}
fclose(p);
}
return 0;
}
4.fget、fputs
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main0401(int argc char**args)//fgets文件行操作
{
if (argc < 2)
return 0;
FILE* p = fopen(args[1] "w");//自定义文件名称
if (p)
{
while (1)
{
char buf[1024] = { 0 };
fgets(buf sizeof(buf) stdin);//stdin标准输入,即键盘输入
//从键盘输入sizeof(buf)个大小保存到buf中
if (strncmp(buf "exit" 4) == 0)//退出循环条件
break;
fputs(buf p);
}
fclose(p);
}
return 0;
}
//读取文件中的内容
//feof函数 检测到文件结束标识返回1,否则返回0。
int main0402()
{
FILE* p = fopen("F:/a.txt" "r");
while (!feof(p))//只要不到文件结尾循环就继续
{
char buf[1024] = { 0 };
fgets(buf sizeof(buf) p);//从p中读取1行储存到buf中
printf("%s" buf);
}
fclose(p);
return 0;
}
5.利用fputs和fgets实现我文件加密解密
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void decode(char* s)
{
int len = 0;
while (s[len])
{
s[len] ;//改变这个值
len ;//遍历字符串
}
}
void encode(char* s)
{
int len = 0;
while (s[len])
{
s[len]--;
len ;
}
}
int main0501(int argc char** args)
{
if (argc < 4)
return 0;
FILE* p1 = fopen("F:/a.txt" "r");
if (p1 == NULL);
return 0;
FILE* p2 = fopen(args[2] "w");
if (p2 == NULL)
return 0;
while (!feof(p1))
{
char buf[1024] = { 0 };
fgets(buf sizeof(buf) p1);
if (args[3][0] == '0')
decode(buf);
else
encode(buf);
fputs(buf p2);
}
fclose(p1);
fclose(p2);
return 0;
}