这是一个关于C语言的写文件数据问题
#include<stdio.h>
#include <stdlib.h>
#include<conio.h>
#include<String.h>
int main()
{
FILE *fp;
char ch;
char   zeng[20];
fp=fopen("F:\\啦啦.txt","at+");


     if((fp=fopen("F:\\啦啦.txt","at+"))==NULL)
      {
            printf("Cannot open file strike any key exit!");
            getch();
            exit(1);
      }
     ch=fgetc(fp);
    while (ch != EOF)
      {
      putchar(ch);
      ch=fgetc(fp);
      } //这个过程是进行读数据的测试过程
     //接下来进行写数据
scanf("%s",zeng);
fputs(zeng,fp);

   fclose(fp);



system("pause");
return 0;
}

我想完成文件的读写,我用的window10系统,在F盘建立文件啦啦.txt。想对它通过C语言练习文件读写。上面代码完成了。但是有个问题,就是写数据,最多能写20个字符。我不想用这种方式,因为假如我只写3个字符,就浪费了些空间,写22个字符的话,就溢出了,有没有办法能兼容这两个问题,灵活的写任意长度的字符都没事呢

3个回答

这个zeng[]是临时变量,占用的内存在该函数结束时会自动释放
除非先知道输入的数据的大小然后随时申请空间(malloc),否则只能把20改成一个更大的数据

qq_43412960
qq_43412960 谢谢
8 个月之前 回复

char zeng[20];
这里【】里的20是设置输入字符的最大长度,超过20个字符的话就会自动去掉后面的,想要多写不溢出的话把20改成更大的数字比如20000就OK了

qq_43412960
qq_43412960 谢谢
8 个月之前 回复

...
{
FILE *fp;
char ch;

fp = fopen("F:\\啦啦.txt", "at+");


if ((fp = fopen("F:\\啦啦.txt", "at+")) == NULL)
{
printf("Cannot open file strike any key exit!");
getchar();
exit(1);
}
ch = fgetc(fp);
while (ch != EOF)
{
putchar(ch);
ch = fgetc(fp);

}

 ch = getchar();  //这里回车作为输入结束
 FILE *stream = stdin;
 int stdin_len = strlen(stream->_ptr);
 if (stdin_len > 2)
 {
    fputs(stream->_ptr, fp);    //stream->_ptr 后面会带有\n\n  不需要就开空间复制前面的输入字符串
 }
fclose(fp);
system("pause");
return 0;

}

qq_43412960
qq_43412960 大佬我爱你
8 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C语言大量文件依次读写

悬赏求助一个小问题。我有一个简单的C语言程序,可以实现计算一个输入文件同时输出结果文件。现在想要计算大量不同的该输入文件,同时一一输出结果。有会的求指导一下,加好友492385974,

c语言读写文件时出现的问题

为什么我我读文件只能出现第一个数据。其他的数据都不会出现。![图片说明](https://img-ask.csdn.net/upload/201609/06/1473176549_597768.png) --------- ![图片说明](https://img-ask.csdn.net/upload/201609/06/1473176569_324374.png) ---------一下是源码 #include<stdio.h> #include<stdlib.h> #define N 30 #include<string.h> struct recipe{ char food[10]; float price; struct recipe *next; }; struct recipe* creat() { int x; int i=0; struct recipe *head,*p,*tail; head=tail=NULL; printf("请输入新添加的菜品数量:"); scanf("%d",&x); for(i=0;i<x;i++){ p=(struct recipe *)malloc(sizeof(struct recipe)); if(p==NULL) { printf("分配内存失败."); exit(1); } p->next=NULL; printf("请输入菜品的名称:"); scanf("%s",p->food); printf("请输入菜品价格:"); scanf("%f",&p->price); if(head==NULL) { head=p; tail=p; } else { tail->next=p; tail=p; } } return head; } void displayRecipe(struct recipe *p) { printf("\t\t菜名--------------------------------价格\n"); while(p!=NULL) { printf("\t\t%s-------------------------------%f\n",p->food,p->price); p=p->next; } } int choosemenu(){ printf("\t\t\t[1]输入新的菜品信息\n"); printf("\t\t\t[2]查看现有菜品信息\t\n"); printf("\t\t\t[3]将现有菜品价格从小到大排序\t\n"); printf("\t\t\t[4]查找现有菜品信息\t\n"); printf("\t\t\t[5]删除现有菜品信息\t\n"); printf("\t\t\t[6]保存修改菜品信息\t\n"); printf("\t\t\t[7]退出菜品信息管理系统\t\n"); printf("\t\t\t[8]读取已有文件信息.\t\n"); printf("\t\t\t[9]清屏。\t\n"); printf("\t\t\t请选择: \n"); return 0; } struct recipe *Newsth(struct recipe *p) { struct recipe *m; if((m=(struct recipe *)malloc(sizeof(struct recipe)))==NULL) { printf("分配内存失败"); exit(1); } printf("请输入新输入的菜品名称:"); scanf("%s",m->food); printf("请输入新输入的菜品价格:"); scanf("%f",&m->price); m->next=p; return m; } struct recipe *sort(struct recipe *b) { struct recipe *p,*pre_min,*min,*first,*tail; first=NULL; while(b->next!=NULL) { for(p=b,min=b;p->next!=NULL;p=p->next) { if((p->next->price)<(min->price)) { pre_min=p;//保留当前所找到最小节点的前驱节点 min=p->next;//保留当前最小节点 } } if(b==min) { b=b->next; } else { pre_min->next=min->next;//将当前最小节点移出链表 } if(first==NULL) { first=min; tail=first; } else { tail->next=min; tail=min; } } if(b->next==NULL) { tail->next=b; tail=b; } return first; } void search(struct recipe *d) { char name[10]; printf("请输入需要查找的菜品名称:"); scanf("%s",name); while(strcmp(d->food,name)!=0) { d=d->next; if(d==NULL){ printf("输入有误,请重新输入.\n"); break;} } if(d!=NULL) printf("你要查找的菜品信息为%s,价格为%f\n",d->food,d->price); } struct recipe *Delete(struct recipe *h) { struct recipe *f,*j,*start; char target[10]; start=h; start->next=h->next; printf("请输入你想要删除的菜品的名称:"); scanf("%s",target); while(strcmp(h->food,target)!=0) { if(h->next->next==NULL) j=h; h=h->next; } if(h->next==NULL) { j->next=NULL; free(h); } else{ strcpy(h->food,h->next->food); h->price=h->next->price; f=h->next; if(h->next->next!=NULL) h->next=h->next->next; else h->next=NULL; free(f); } return start; } void save(struct recipe *g) { FILE *fp; if((fp=fopen("d:\\recipe.txt","w"))==NULL) { printf("无法打开文件.\n"); exit(0); } while(g!=NULL) { fprintf(fp,"\t\t%s\t\t\t%f\n",g->food,g->price); g=g->next; } fclose(fp); } void read(struct recipe *j){ FILE *f; if((f=fopen("d://recipe.txt","r"))==NULL) { printf("无法读取文件.\n"); exit(0); } while(j!=NULL) { fscanf(f,"\t\t%s\t\t\t%f\n",j->food,&j->price); printf("\t\t%s\t\t\t%f\n",j->food,j->price); j=j->next; } fclose(f); } void cls() { system("cls"); } void main(){ int n=0; struct recipe *head=NULL; printf("--------------------欢迎进入订餐管理系统--------------------------\n"); printf("-------首次进入请确认你已写好菜品信息--------\n"); head=creat(); system("cls"); while(n!=7){ choosemenu(); scanf("%d",&n); switch(n){ case 1:head=Newsth(head); break; case 2:displayRecipe(head); break; case 3:head=sort(head); break; case 4:search(head); break; case 5:head=Delete(head); break; case 6:save(head); break; case 7:printf("Thanks for your use!\n\n\n\n"); break; case 8:read(head); break; case 9:cls(); break; default:choosemenu(); printf("输入有误,请重新输入.\n"); } } system("pause"); }

C语言读取excel或txt文件数据

C语言如何读取Excel或txt文件中有float型和字符串型数据中的float型数据

如何用C语言删除一个文件?

如何用C语言删除一个文件?想用remove函数。从键盘上输入要删除的文件名。可不知如何编写,大师可否写个例子啊。

C语言写文件,记事本打开是乱码

程序输入之后,记事本只显示name、addr,而int型数据均为乱码,请问如何解决这一问题?? #include <stdio.h> #define SIZE 3 struct Student_type { char name[10]; int num; int age; char addr[15]; }stud[SIZE]; void save() { FILE * fp; int i; if((fp=fopen("stu.dat","wb"))== NULL) /**< 注意括号的数量 */ { printf("cannot open the file\n"); return; } for(i=0;i<SIZE;i++) if(fwrite(&stud[i],sizeof(struct Student_type),1,fp)!=1) printf("file write error\n"); fclose(fp); } int main() { int i; printf("please enter data of students:\n"); for(i=0;i<SIZE;i++) scanf("%s%d%d%s",stud[i].name,&stud[i].num,&stud[i].age,stud[i].addr); save(); return(0); } ![图片说明](https://img-ask.csdn.net/upload/201708/22/1503409032_615404.png)

C语言修改文件中的数据

#include"string.h” #include "stdio.h" #include "malloc.h" #include "stdlib.h" #define MAXSIZE 3 typedef struct airline { char str_name[10];/*起点站名 */ char ter_name[10];/*终点站名 */ char air_num[10];/*航班号*/ char plane_num[10];/*飞机号*/ char day[7];/*飞行周日(星期几)*/ int tkt_amt;/*乘员定额*/ int tkt_sur;/*余票量*/ int money; }lineinfo; struct airline *start; struct airline *find() /*根据系统提出的航班号查询并以指针形式返回*/ { struct airline *info; char number[10]; int i = 0; info = start; printf("请输入航班号:"); scanf("%s", number); while (i<MAXSIZE) { if (!strcmp(number, info->air_num)) return info; info++; i++; } printf("对不起,该航线末找到!\n"); return NULL; } struct airline *fix_start(struct airline *p) { // 求大神在这里用文件修终点站名 return p; } void display(struct airline *p) { printf("%8s\t%8s\t%3s\t%s\t%4s\t\t%3d\t%10d\t%10d\n", p->str_name, p->ter_name, p->air_num, p->plane_num, p->day, p->tkt_amt, p->tkt_sur, p->money); } void main() /* 主函数 */ { int i = 0; struct airline * p; FILE *fp = NULL; struct airline air[MAXSIZE]; char msg[1024] = { 0 }; fp = fopen("初始航线.txt", "r"); if (fp == NULL) { printf("读取失败"); } else { while (fgets(msg, 1024, fp) != NULL) { sscanf_s(msg, "%s %s %s %s %s %d %d %d", &air[i].str_name, 20, &air[i].ter_name, 20, &air[i].air_num, 20, &air[i].plane_num, 20, &air[i].day, 20, &air[i].tkt_amt, &air[i].tkt_sur, &air[i].money); i++; } } if (i == MAXSIZE) printf("读取成功\n"); system("pause"); start = &air[0]; p = find(); fix_start(p); display(p); } 这个是文件内容 shanghai beijine 1 B8571 SUN 3 3 100 beijing shanghai 2 S1002 MON 2 2 200 tianjing london 3 L1003 FRI 1 1 300

Linux下 C语言 读写 块设备文件 问题

系统是ubuntu,当u盘插入的时候 ,系统会在/dev 目录下面多出一个 scsi 设备文件, 类似于 /dev/sdb 像这种块设备文件。 我用c语言识别它是U盘,并且用linux C open(),write(),read(),函数读写 /dev/sdb,大致情况 就是在前512个字节上写上自己的秘钥,以此来标记这个U盘。 可是 三个U盘按顺序 写上不同的秘钥(key001,key002),热插拔之后再读取的时候,其中一个U盘里面的秘钥没有读出来,有时候还会秘钥错乱。 我不知道是我的用的方法不对还是不能这样做,网上说可以用ioctl 函数来操作。但是都很模糊。。。我已经懵逼了现在。。。。在线等 有点急!!

C语言写入数据到二进制文件失败

# 相关代码如下 # 我在add()调用lessondatewrite()写进去了 #但是lessondateltater()调用lessondatewrite()没写进去 # 调试结果![图片说明](https://img-ask.csdn.net/upload/201811/02/1541169947_50238.png) #运行结果 英语行的 40 应该变成39 ![图片说明](https://img-ask.csdn.net/upload/201811/02/1541169992_687847.png) ``` typedef struct //定义一个Lesson类型的结构体 { char name[50]; char techer[50]; char location[50]; char time[50]; int number; }LESSON; /*课程结构体参数 课程名 char 50字节 授课老师 char 50字节 位置 char 50字节 开课时间 char 50字节 座位数 int 4字节 结构体大小总计 204字节*/ LESSON lessondatewrite(FILE *fl,LESSON date)//这是一个结构体类型的函数,它可以写入课程数据,接受一个文件指针 { fflush(fl);//刷新缓存区 使将要输入的数据写入硬盘 一次性输入大量数据时使用 避免输入失败 fwrite(&date,sizeof(LESSON),1,fl); } void add()//添加一个课程数据 { FILE *lessondate; LESSON lesson={0};// 声明一个LESSON类型的变量为lesson if((lessondate=fopen("lessondate","rb+"))==NULL)//若文件不存在,则建立文件 { lessondate=fopen("lessondate","wb+"); //rb+打开二进制文本文件,允许读写,若不存在返回空 //wb+新建二进制文本文件,允许读写。如果文件存在则删除文件重建 } printf("请依次输入如下数据,课程名,授课老师,教室位置,开课时间(xx月xx日xx:xx),座位数(各数据以空格隔开,回车结束)\n"); scanf("%s %s %s %s %d",&lesson.name,&lesson.techer,&lesson.location,&lesson.time,&lesson.number); //scanf在接收字符串时 不会接收空白符(空格与回车) 逗号或其他都能接收 //%s不能使用char 而是char[] fseek(lessondate,0L,SEEK_END); lessondatewrite(lessondate,lesson); fclose(lessondate); system("cls"); admin(); } void lessondatelater(int choose) { FILE *lessondate; LESSON lesson={0}; int i; lessondate=fopen("lessondate","rb+"); for(i=0;i<choose;i++) { lesson=lessondateread(lessondate);//给读取函数传递一个文件指针 假定有是三个结构体A B C 循环结束后光标在C前面B后面 } fseek(lessondate,-204L,SEEK_CUR);//后退到上一个结构体 此时光标在B前面 lesson=lessondateread(lessondate);//读取这个结构体数据 读取B的数据 此时光标前进到C前面 lesson.number--;//修改结构体数据 fseek(lessondate,-204L,SEEK_CUR);//后退到上一个结构体 此时光标在B前面 lessondatewrite(lessondate,lesson);//写入修改后结构体数据 覆盖B } ```

关于使用C语言自己写pcap文件,使用wireshark读取的问题

命令行下netsh trace命令抓取的网络包放在了.etl文件里,怎么提取抓到的数据包,并且把它对应的进程ID从etl文件中拿到 命令如下: C:\windows\system32> netsh trace start capture=yes tracefile="e:\test.etl" *******开始关联(就是在抓取 当前计算机上de网络数据包) C:Wndows\system32> netsh trace stop 生成test.etl文件,可以使用NetWork Monitor 3.4打开查看,网上也有很多教程,请问有人对etl文件进行过处理吗? 我在网上查阅资料之后使用tdh库函数可以获取etl里的文件。 想做的工作就是自己把etl文件里的内容拿出来,就相当于自制一个NetWork Monitor可是,这是最终的目标。现在出现很多问题。 就目前而言只希望能够把数据包写入pcap文件能够使用wireshark进行读取。就这都出现很多错误。 程序都是用C语言写的。 我现在可以拿到网络数据以及PID(不知道怎么获取进程名称),就是从以太帧头开始到数据所有的十六进制字符串。 现在把他们都按照pcap文件的格式写进pcap文件,命名方式为Pid_etl.pcap,希望成果是使用wireshark打开,并且能够查看对应五元组的信息,也就是source address,dest address, source port, dest prot。 (以及Pid。) UDP的数据包有些正确有些则显示错误,TCP的数据包写好之后有些正确,有些就被wireshark截断,报错说超出最大的长度。 ![图片说明](https://img-ask.csdn.net/upload/201508/03/1438612961_148153.png) ![图片说明](https://img-ask.csdn.net/upload/201508/03/1438612924_256444.png) 请大神求救...刚毕业找到工作的菜鸟,希望不吝指点啊.....

C语言实现文件合并的问题

之前已经编写了一个程序,可以实现.txt的文件内容追加写,可是对两个视频操作的时候就行不通了。但是又不知道问题出现在哪里,视频能合并,文件大小是两个文件的和,可是新和成的文件内容只显示一个文件的内容。这个要怎么解决。

多线程写同一个文件, 数据内容出错

### 描述: * 1. 采用C语言, 多线程 对同一个文件进行写操作; * 2.每个线程有自己的写入位置; * 3.每个线程有自己的数据缓冲区; * 4.写文件前, 会 加锁(全局变量), 然后 将文件句柄 跳跃到指定位置, 写下线程缓冲区的数据; * 5.现象: 写的是图片, 经常出现写入数据出错, 图片打不开; * 6.日志: 对写文件前后的 文件句柄进行位置打印, 位置正确. ``` (每个线程进行写文件的)代码实现: 各线程都会打开同一个文件获取句柄, void write_file(FILE* fp, char *srcContent, int Lenth, int index) { int nwrite = 0, len = 0; pthread_mutex_lock(&g_muetx_lock); printf("---------- 1 -----------\n"); if((fseek(fp, threadWorkHandle[index].writeInitPosition , SEEK_SET)) == -1) { myprint("Err : func lseek()"); assert(0); } myprint("pthread : %d, The write begin current : %lu, fp : %p", index, ftell(fp), fp); while(nwrite < Lenth) { if((len = fwrite( srcContent + nwrite, 1, Lenth - nwrite, fp)) < 0) { myprint("Err : func fwrite()"); assert(0); } nwrite += len; } threadWorkHandle[index].writeInitPosition += Lenth; myprint("pthread : %d, The write end : %lu, nwrite : %d", index, ftell(fp), nwrite); //fflush(fp); printf("---------- 2 -----------\n"); pthread_mutex_unlock(&g_muetx_lock); } ```

关于c语言读取文件信息到链表,怎么操作?

问题:在读取文件数据到链表时好像出错了,除了"w+"的打开方式会让打印函数在程序运行,其他的打开方式在程序运行后不显示。![图片说明](https://img-ask.csdn.net/upload/201903/16/1552703248_859387.png) ``` #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<malloc.h> struct stu { int id; int age; char name[10]; int score; struct stu *next; }; void printf_stu(struct stu * head)//打印函数 { struct stu *p = head; printf("学生成绩\n"); printf("%-2s %-2s\n", "学号", "成绩"); while (p != NULL) { printf("%d %d\n", p->id, p->score); p = p->next; } } struct stu * create(int n) {//输入链表函数 int i; struct stu *head = NULL, *p, *q = NULL; for (i = 1; i <= n; i++) { if ((p = (struct stu *)malloc(sizeof(struct stu))) == NULL) { printf("不能分配!"); exit(0); } p->next = NULL; printf("第%d个学生的信息:", i); scanf("%d%d", &p->id, &p->score); if (i == 1) head = p; else q->next = p; q = p; } return head; } void open_in(struct stu *head) {//输入文件函数1 FILE *fp; struct stu *p = head; fp = fopen("c://学生信息表.txt", "w"); fprintf(fp, "%s %s\n", "学号", "成绩"); while (p != NULL) { fprintf(fp, "%d %d\n", p->id, p->score); p = p->next; } fclose(fp); } void open_inpp(struct stu *head) {//输入文件函数2 FILE *fp; struct stu *p = head; fp = fopen("c://学生信息表.txt", "a+"); fprintf(fp, "%s %s\n", "学号", "成绩"); while (p != NULL) { fprintf(fp, "4%d 4%d\n", p->id, p->score); p = p->next; } fclose(fp); } struct stu *createlink()//读取文件数据函数 { struct stu *head = (struct stu *)malloc(sizeof(struct stu)); int t, y; struct stu *p; struct stu *q; FILE * fp; p = q = head; fp = fopen("c://学生信息表.txt", "r"); while (fscanf(fp, "%d %d\n", &t, &y) != EOF) { q = (struct stu*)malloc(sizeof(struct stu)); q->id = t; q->score = y; p->next = q; p = q; } p->next = NULL; head = p; return head; } void main() { int n, i,sel; struct stu *head = NULL,*p; for (i = 1; i > 0; i++) { printf("1-输入学生数据 2-添加学生数据\n"); printf("3-打印学生数据"); printf("请输入选择(1-3)\n"); scanf("%d", &sel); switch (sel) { case 3: head = createlink(); printf_stu(head); break; case 2: open_inpp(head); break; case 1: printf("输入n:"); scanf("%d", &n); head = create(n); open_in(head); break; } printf("1-回到上一页 2-结束\n"); scanf("%d", &sel); if (sel > 1) break; } system("pause"); } ```

C语言读文件读不全的问题

我用while,getline的方法读一个28kb的c文件,可总是读不全,一共360多行的内容只能读两百多行,读的多了前面的内容就丢失了,这是什么问题?

C语言数据文件处理技术问题,从3个单词文件中找出第1个在这3个文件中都出现的单词?

设有3个按词典编辑顺序组织的单词文件,编写从这3个文件中找出第1个在这3个文件中都出现的单词,要求采用算法最快。 我的代码无论在三个文件中输什么单词运行出来都是下图这样,调试也没法逐步进行。 ![图片说明](https://img-ask.csdn.net/upload/201812/22/1545491564_265167.png) 代码如下,求大神看看哪个地方有问题。 ``` #include<stdio.h> #include<string.h> #define n 100 int main() { FILE *fp1,*fp2,*fp3; char str1[n],str2[n],str3[n]; if((fp1=fopen("dictionary1.txt","r"))==NULL){ printf("不能打开文件dictionary1.txt\n"); return 0;} while(!feof(fp1)){ fgets(str1,n,fp1); if((fp2=fopen("dictionary2.txt","r"))==NULL){ printf("不能打开文件dictionary2.txt\n"); return 0;} while(!feof(fp2)){ fgets(str2,n,fp2); if(strcmp(str1,str2)==0){ if((fp3=fopen("dictionary3.txt","r"))==NULL){ printf("不能打开文件dictionary3.txt\n"); return 0;} while(!feof(fp3)){ fgets(str3,n,fp3); if(strcmp(str2,str3)==0){ printf("在三个词典中同时出现的第一个词为%s\n",str1); return 1;} else continue;} printf("三个词典中无相同的词\n"); return 0;} else continue;} printf("三个词典中无相同的词\n"); return 0; } } ```

c语言 大量数据在写入文件时会崩溃 急求问题所在和解决办法

想实现的功能是建立一堆文本文件的索引,但是现在已经成功创建了一个索引表,但把索引表存入文件的时候就会进行到一半然后崩溃 需要在目录下创建一个book文件夹储存信息 现在的问题 信息太多时候写入最后save_index 崩溃 释放内存好像不行 代码如下 头文件 ``` #ifndef Searchengine_H #define Searchengine_H #include <stdio.h> #include <windows.h> #include<stdlib.h> struct word_place //保存单词的地址 { int book_id; char book_name[30]; long int location; }; typedef struct word_place place; typedef struct key* key_node; struct key //为每个关键词创造一个节点 { int id; char key[20]; int find_number; place *places; }; key_node key_information[1000000]; struct file_inf //搜索文件的序号 { int number; char name[100]; }file_information[10000]; void find(char * lpPath); int find_word(char* word); void add_key(char* word,int num,long int place) ; int is_letter(char c) ; void index_a_book(int num) ; void kuaipai(int left,int right,key_node a[]) ; void save_index(int x); #endif ``` 遍历文件夹获取文件信息的文件 ``` #include"search_engine.h" void find(char * lpPath) //读取一个文件夹的文件名 { int i=0; char szFind[MAX_PATH],szFile[MAX_PATH]; WIN32_FIND_DATA FindFileData; HANDLE hFind; strcpy(szFind,lpPath); strcat(szFind,"\\*.*"); hFind = FindFirstFile(szFind,&FindFileData); if(INVALID_HANDLE_VALUE == hFind) return; while(TRUE) { if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { if(FindFileData.cFileName[0]!='.') { strcpy(szFile,lpPath); strcat(szFile,"\\"); strcat(szFile,FindFileData.cFileName); find(szFile); } } else { // printf("%s\n",FindFileData.cFileName); file_information[i].number=i; strcpy(file_information[i].name,FindFileData.cFileName); i++; } if(!FindNextFile(hFind,&FindFileData)) { file_information[i].name[0]='\0'; break; } } } void save_filenum()//储存文件序列 { int i=0; FILE *fp; if((fp=fopen("book index.txt","r+"))==NULL) {printf("open error\n"); exit(0); } char* is_write="0"; fscanf(fp,"%s",&is_write); printf("%c\n",is_write); if (is_write=='0') fclose(fp); else { is_write="1"; fseek(fp,0,0); fprintf(fp,"%s\n",is_write); } for(i=0;file_information[i].name[0];i++) { fprintf(fp,"%d ",file_information[i].number); fprintf(fp,"%s\n",file_information[i].name); } fclose(fp); } ``` 创建和储存索引的函数 ``` #include"search_engine.h" int find_word(char* word) //判断是否为已有的关键词 { int i; for(i=0;key_information[i];i++) { if(strcmp(key_information[i]->key,word)==0) break; } return i; }//少一个储存查找的算法 void add_key(char* word,int num,long int place) //把关键词添加到索引中 { int i=find_word(word); if(!key_information[i]) { key_information[i]=(key_node)malloc(sizeof(struct key)); strcpy(key_information[i]->key,word); key_information[i]->find_number=1; key_information[i]->places=(struct word_place*)malloc(100*sizeof(struct word_place)) ; } else key_information[i]->find_number++; int temp=key_information[i]->find_number-1; if(temp%98==0) key_information[i]->places=(struct word_place*)realloc(key_information[i]->places,(temp+100)*sizeof(struct word_place)); strcpy(key_information[i]->places[temp].book_name,file_information[num].name); key_information[i]->places[temp].book_id=num; key_information[i]->places[temp].location=place; } int is_letter(char c) //判断一个字符是否是特殊字符 { if(c >='0' && c<='9') return 1; else if(c >='a' && c<='z' || c >='A' && c<='Z') return 2; else return 0; } void index_a_book(int num) //为一本书中的单词建立索引 { FILE *fp; char* name=file_information[num].name; char way[100]="book\\"; strcat(way,name); printf("%s\n",way); if((fp=fopen(way,"r+"))==NULL) {printf("open error\n"); exit(0); } char* read; read=(char*)malloc(sizeof(char)*100); long int place=0; fseek(fp,0L,SEEK_SET); while(!feof(fp)) { fscanf(fp,"%s",read); if(is_letter(read[strlen(read)-1])==0) read[strlen(read)-1]=0; if(is_letter(read[0])==2)//首为必须为字母 { printf("%s\n",read); add_key(read,num,place); place++; } } fclose(fp); } void kuaipai(int left,int right,key_node a[]) //对列表快速排序 { int i,j; char* middle; key_node temp; i=left; j=right; middle=a[(i+j)/2]->key; do{ while(strcmp(a[i]->key,middle)<0&&i<right) i++; while(strcmp(a[j]->key,middle)>0&&j>left) j--; if(i<=j) { temp=a[i],a[i]=a[j],a[j]=temp; j--; i++; } }while(i<=j); if(left<j) kuaipai(left,j,a); if(right>i) kuaipai(i,right,a); } void save_index(int x)//储存索引 { FILE *fp; if((fp=fopen("word index.txt","w+"))==NULL) {printf("open error\n"); exit(0); } printf("open success\n"); printf("%d",x); int i,j; fprintf(fp,"%d\n",x); i=0; printf("%d %s %d \n",i,key_information[i]->key,key_information[i]->find_number); printf("%c %d",key_information[i]->key[0],is_letter(key_information[i]->key[0])); fprintf(fp,"%d %s %d ",i,key_information[i]->key,key_information[i]->find_number); /* for(i=0;i<100;i++) { fprintf(fp,"%d %s %d ",i,key_information[i]->key,key_information[i]->find_number); for(j=0;j<key_information[i]->find_number;j++) { fprintf(fp,"%d %d ",key_information[i]->places[j].book_id,key_information[i]->places[j].location); } fprintf(fp,"ok\n"); }*/ fclose(fp); } ``` 主函数 ``` #include"search_engine.h" //void add index() int main() { char filepath[MAX_PATH]="book"; //可自己输入文件夹绝对路径 find(filepath); int i=0; /* for(i=0;file_information[i].name[0];i++) { printf("%d %s\n",file_information[i].number,file_information[i].name); }*/ save_filenum(); for(i=0;file_information[i].name[0];i++) { index_a_book(i); } /*for(i=0;key_information[i];i++) { printf("%s\n",key_information[i]->key); } printf("%s\n",key_information[1]->places[0].book_name);*/ int word_num; for(i=0;key_information[i];i++) ; word_num=i-1; kuaipai(0,word_num,key_information); printf("ok\n"); save_index(word_num); system("PAUSE"); for(i=0;key_information[i];i++) { free(key_information[i]); } return 0; } ``` 很急,求大佬解答

C语言,文件问题,最后出现乱码

# 请问为什么会这样? 不太懂![图片说明](https://img-ask.csdn.net/upload/201912/28/1577532769_424148.png)![图片说明](https://img-ask.csdn.net/upload/201912/28/1577532776_762615.png)

c语言如何把链表数据写入文件?

在写一个通讯录管理系统,然后要把联系人的信息结构体放到链表中,然后将链表里的信息写入文件中,下次打开时还能从该文件读出数据。 链表头指针TEL,结构体中有name,tel,style,mail 四项,存入“telephone.txt"中。 我是这样写的 /*退出程序时将数据写回telephone.txt进行更新*/ void ReadBack() { FILE *TEL = fopen("telephone.txt","wt+"); ID *te = id->next; while (te != NULL) { fwrite(id,sizeof(ID),1,TEL); te = te->next; } fclose(TEL); } 结果文件中是一串乱字 是 屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯?f 请给出代码,本人初学,多谢!

如何用C语言一次性读入大量的txt文件并写到一个文件上

有大量的txt文本文件,需要处理里面的数据,像一次性读入所有的文件并将这些文件中的数据写到一个txt文件上。 文件的名字形如:Q1.txt,Q2.txt,Q3.txt,Q4.txt

c语言读取文件出现一串乱码

c语言读取文件数据时最后出现一串乱码怎么办![图片](https://img-ask.csdn.net/upload/201603/11/1457701905_263874.jpg)![图片](https://img-ask.csdn.net/upload/201603/11/1457701930_642613.jpg)

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

程序员请照顾好自己,周末病魔差点一套带走我。

程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。

Java基础知识面试题(2020最新版)

文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的主类有何不同?Java应用程序与小程序之间有那些差别?Java和C++的区别Oracle JDK 和 OpenJDK 的对比基础语法数据类型Java有哪些数据类型switc...

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

Intellij IDEA 实用插件安利

1. 前言从2020 年 JVM 生态报告解读 可以看出Intellij IDEA 目前已经稳坐 Java IDE 头把交椅。而且统计得出付费用户已经超过了八成(国外统计)。IDEA 的...

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

总结了 150 余个神奇网站,你不来瞅瞅吗?

原博客再更新,可能就没了,之后将持续更新本篇博客。

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

魂迁光刻,梦绕芯片,中芯国际终获ASML大型光刻机

据羊城晚报报道,近日中芯国际从荷兰进口的一台大型光刻机,顺利通过深圳出口加工区场站两道闸口进入厂区,中芯国际发表公告称该光刻机并非此前盛传的EUV光刻机,主要用于企业复工复产后的生产线扩容。 我们知道EUV主要用于7nm及以下制程的芯片制造,光刻机作为集成电路制造中最关键的设备,对芯片制作工艺有着决定性的影响,被誉为“超精密制造技术皇冠上的明珠”,根据之前中芯国际的公报,目...

优雅的替换if-else语句

场景 日常开发,if-else语句写的不少吧??当逻辑分支非常多的时候,if-else套了一层又一层,虽然业务功能倒是实现了,但是看起来是真的很不优雅,尤其是对于我这种有强迫症的程序"猿",看到这么多if-else,脑袋瓜子就嗡嗡的,总想着解锁新姿势:干掉过多的if-else!!!本文将介绍三板斧手段: 优先判断条件,条件不满足的,逻辑及时中断返回; 采用策略模式+工厂模式; 结合注解,锦...

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

2020阿里全球数学大赛:3万名高手、4道题、2天2夜未交卷

阿里巴巴全球数学竞赛( Alibaba Global Mathematics Competition)由马云发起,由中国科学技术协会、阿里巴巴基金会、阿里巴巴达摩院共同举办。大赛不设报名门槛,全世界爱好数学的人都可参与,不论是否出身数学专业、是否投身数学研究。 2020年阿里巴巴达摩院邀请北京大学、剑桥大学、浙江大学等高校的顶尖数学教师组建了出题组。中科院院士、美国艺术与科学院院士、北京国际数学...

为什么你不想学习?只想玩?人是如何一步一步废掉的

不知道是不是只有我这样子,还是你们也有过类似的经历。 上学的时候总有很多光辉历史,学年名列前茅,或者单科目大佬,但是虽然慢慢地长大了,你开始懈怠了,开始废掉了。。。 什么?你说不知道具体的情况是怎么样的? 我来告诉你: 你常常潜意识里或者心理觉得,自己真正的生活或者奋斗还没有开始。总是幻想着自己还拥有大把时间,还有无限的可能,自己还能逆风翻盘,只不是自己还没开始罢了,自己以后肯定会变得特别厉害...

男生更看重女生的身材脸蛋,还是思想?

往往,我们看不进去大段大段的逻辑。深刻的哲理,往往短而精悍,一阵见血。问:产品经理挺漂亮的,有点心动,但不知道合不合得来。男生更看重女生的身材脸蛋,还是...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试:第十六章:Java中级开发

HashMap底层实现原理,红黑树,B+树,B树的结构原理 Spring的AOP和IOC是什么?它们常见的使用场景有哪些?Spring事务,事务的属性,传播行为,数据库隔离级别 Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点 SpringCould组件有哪些,他们...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

Python爬虫,高清美图我全都要(彼岸桌面壁纸)

爬取彼岸桌面网站较为简单,用到了requests、lxml、Beautiful Soup4

差点跪了...

最近微信又搞出了一个大利器,甚至都上了热搜,当然消息最敏捷的自媒体人,纷纷都开通了自己的视频号。01 视频号是什么呢?视频号是微信体系内的短视频,它不同...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

Vue回炉重造之router路由(更新中)

你好,我是Vam的金豆之路,可以叫我豆哥。2019年年度博客之星、技术领域博客专家。主要领域:前端开发。我的微信是 maomin9761,有什么疑问可以加我哦,自己创建了一个微信技术交流群,可以加我邀请你一起交流学习。最后自己也创建了一个微信公众号,里面的文章是我自己精挑细选的文章,主要介绍各种IT新技术。欢迎关注哦,微信搜索:臻美IT,等你来。 欢迎阅读本博文,本博文主要讲述【】,文字通...

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

Java岗开发3年,公司临时抽查算法,离职后这几题我记一辈子

前几天我们公司做了一件蠢事,非常非常愚蠢的事情。我原以为从学校出来之后,除了找工作有测试外,不会有任何与考试有关的事儿。 但是,天有不测风云,公司技术总监、人事总监两位大佬突然降临到我们事业线,叫上我老大,给我们组织了一场别开生面的“考试”。 那是一个风和日丽的下午,我翘着二郎腿,左手端着一杯卡布奇诺,右手抓着我的罗技鼠标,滚动着轮轴,穿梭在头条热点之间。 “淡黄的长裙~蓬松的头发...

大胆预测下未来5年的Web开发

在2019年的ReactiveConf 上,《Elm in Action》的作者Richard Feldman对未来5年Web开发的发展做了预测,很有意思,分享给大家。如果你有机会从头...

立即提问
相关内容推荐