Tag: file io

使用fgets从C中的文件中读取字符串

我试图从一个文件中读取字符串,该文件在新行上包含每个字符串,但我认为它只读取一行换行符而不是字符串,我不知道为什么。 如果我要以错误的方式阅读字符串,请纠正我。 i=0; F1 = fopen(“alg.txt”, “r”); F2 = fopen(“tul.txt”, “w”); if(!feof(F1)) { do{ //start scanning file fgets(inimene[i].Enimi, 20, F1); fgets(inimene[i].Pnimi, 20, F1); fgets(inimene[i].Kood, 12, F1); printf(“i=%d\nEnimi=%s\nPnimi=%s\nKaad=%s”,i,inimene[i].Enimi,inimene[i].Pnimi,inimene[i].Kood); i++;} while(!feof(F1));}; /*finish getting structs*/ printf是让我看到什么是什么,这是结果 i=0 Enimi=peter Pnimi=pupkin Kood=223456iatb i=1 Enimi= Pnimi=masha Kaad=gubkina i=2 Enimi=234567iasb Pnimi=sasha Kood=dudkina 正如您在第一个结构读取后所看到的那样,有一个空白(换行符?)onct然后一切都被移动了。 我想我可以读取一个虚拟的字符串来吸收额外的空白,然后什么都不会移动,但这并不能帮助我理解问题并避免将来使用。 编辑1:我知道它停在换行符但仍然读取它。 我想知道为什么它不会在第三个字符串中读取它并转移到第四个字符串而不是将第四个字符串作为源的第四行但它只发生一次。 顺便说一下,文件的格式是这样的 peter pupkin 223456iatb masha gubkina […]

编写PNM P6的问题

我正在编写一个程序,它接收两个重复的PNM P6文件,将第一个文件的内存放入缓冲区,在其上创建一条黄色对角线,并将结果写入第二个文件。 当我运行它时,输出文件已损坏,无法显示。 我注意到在查看输出时它缺少应该位于顶部的三行: P6 1786 1344 255 我不知道如何以编程方式确保这些行保留在代码中 – 我无法弄清楚为什么它们甚至首先被覆盖。 当我手动将这些行添加到输出时,该文件不再被破坏。 但是,没有出现黄色对角线。 这是同一个问题的一部分,还是我还应该考虑修复其他问题? 我的代码: #include #include #include typedef struct { unsigned char red, green, blue; } iPixel; typedef struct { int x, y; iPixel *data; } Image; Image * ReadImage(char *filename) { FILE *f = fopen(filename, “rb”); Image *img = NULL; char magicNum[128]; int […]

fprintf没有写入文件

出于某种原因,我的fprintf语句什么也没做。 我把printf语句放在它周围,看看它是否到达它(它确实如此),但我仍然无法弄清楚为什么没有发生。 这是我的代码: #include int main(int argc, char *argv[]) { char c[8]; FILE *fp; FILE *fp2; int i=0; int count,j,temp=0; fp = fopen(argv[0],”r”); fp2 = fopen(argv[1], “w”); for(i=0; i<50;i++) { count = fread(c,1,8,fp); if(((4<i)&&(i<10))||((14<i)&&(i<20))||((24<i)&&(i<30))||((34<i)&&(i<40))||(44<i)){ continue; } else{ for(j = 0; j<count; j++){ c[j]=c[j]-'0'; c[j]=c[j] << (count – (j+1)); temp = temp | c[j]; } fprintf(fp2, […]

如何将hex数字打印到文件?

我试图将0000到fffe的每个hex值存储到一个文件中。 我如何使用fwrite或fprintf将这些值放入文件中? 目前,我有一个while循环,使用printf打印所有数字(这是控制台屏幕),但我需要在文件中。

如何调整此算法以处理要修改的关键字的多次出现?

我想搜索所有出现的字符串(第一个参数),并在所有第一个字符串出现之前添加另一个字符串(第二个参数)。 理想情况下,我希望每一次出现的dime都用limedime代替。 然而,我设法做到了这一点,因为只有第一次出现这个词。 未检测到任何不匹配的匹配字符串,并且不执行任何操作。 此外,包含dime多行根据在前一行上进行的修改进行修改,这不是我想要的。 这是我得到的一些示例输出: something dime something dime something something 会变成 something limedime something dime something something 如果我有这个 dime notimportant! dime dime 我会得到 limedime notimportant! limelimedime limelimelimedime 编辑:我已修改代码,以便您可以使用stdin轻松测试它,并且还包括replace_str() : #include #include #include char *replace_str(char *str, char *orig, char *rep) { static char buffer[4096]; char *p; if(!(p = strstr(str, orig))) return str; strncpy(buffer, str, […]

即使我使用malloc,C中的fread和fwrite也会出现分段错误

我一直致力于一个程序,由于分段错误而不断崩溃。 我裁掉了导致此问题的最简单的代码部分。 根据我到目前为止所学到的,如果我要求操作系统进行内存分配,然后使用指针读取和写入内存的那个地址,那么应该是好的。 在这种情况下,以下剪切看起来对我来说非常简单:打开一个新文件进行写入,打开源文件,创建outdata以保存足够的字节,从源读取精确的字节值,并使用具有相同参数的fwrite写入新文件。 我有什么基本的东西吗? int main (void) { FILE *outimg = fopen(“test.jpg”, “w”); FILE *rawFile = fopen(“source.file”, “r”); if(rawFile==NULL) { fprintf(stderr, “Unable to open source file\n”); return 1; } int chunkSize = 512; int picChunkCount = 440; unsigned char *outdata = malloc(chunkSize*picChunkCount*sizeof(unsigned char)); if(outdata==NULL) { fprintf(stderr,”Unable to allocate memory for *outdata\n”); return 2; } […]

将数字存储为(x,y)从特定点的文件中进行控制

我有一个实例文件 ,我需要以2Darrays系统的forms存储NUM_PT和所有相应的坐标( 个人选择,以便我可以轻松访问它们 )。 我能够检索NUM_PT但我仍然在阅读连续的坐标到我的数组中。 这是我做的 /* Assignment 2 */ #include #include #include #include #include #define MAXS 256 int main(int argc, char *argv[]) { int num_pt; int inputfile = 0, outputfile = 0, i; for (i = 1; i %s [-i inputfile [-o outputfile]]\n\n”, argv[0]); exit(0); } FILE *fp; fp = fopen(argv[inputfile], “r”); int count […]

在Visual Studio中写入文件时出错

Unhandled exception at 0x102e1cee (msvcr100d.dll) in filename.exe 0xC0000005: Access violation writing location 0x00416858 on. 调试指向行: if (_putc_nolock(ch, f) == EOF) 代码 #else /* _UNICODE */ if (_putc_nolock(ch, f) == EOF) #endif /* _UNICODE */ *pnumwritten = -1; else ++(*pnumwritten); } 在output.c中我相信它是在visual studio库中链接的。 我没有链接它。 我的代码是: body=”” myFile=CreateFile(“Sample.txt”,FILE_APPEND_DATA,FILE_SHARE_WRITE,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0); BufferNo=sprintf(body,”%.5f %[3].5f %[3].5f %[3].5f %[3].5f %[3].5f %[3].5f %[3].5f \n”,a1,a2,a3,a4,a5,a6,a7,a8); […]

将数据从文件读入结构

我正在开发一个可以处理链表/节点中的结构项的程序。 我有大多数函数运行正常,但是我仍然坚持如何从txt文件读取到一个结构(readFromFile函数)。 我一直在阅读但仍然很困惑,主要是关于如何将其作为一个函数而不是在main中编写,并且还读入一个结构 任何帮助,将不胜感激。 编辑:我似乎无法在目前的答案中获得function,所以我正在尝试从主要的txt中读取程序。 我可以打开文件,但问题是:如何将数据读入我的链表? (代码已被修改) 我正在读取的文本文件格式如下: #1 Flat Blade Screwdriver 12489 36 .65 1.75 #2 Flat Blade Screwdriver 12488 24 .70 1.85 #1 Phillips Screwdriver 12456 27 0.67 1.80 #2 Phillips Screwdriver 12455 17 0.81 2.00 Claw Hammer 03448 14 3.27 4.89 Tack Hammer 03442 9 3.55 5.27 Cross Cut Saw 07224 6 […]

在C中提高文件IO的性能

在对它们执行堆操作之后,我需要逐个将大量的整数写入文件。 我试图将排序的文件合并到一个文件中。 截至目前,我正在每次操作后写入文件。 我使用min heap来合并文件。 我的问题是 – 执行文件写入时,每次写入文件或一次写入多块内存块时是否访问磁盘? 如果我将在大小为1024的数组中输出堆,或者可能更多,然后立即执行写操作,它会改善性能吗? 先感谢您。 编辑 – 将使用setbuffer()帮助? 我认为它应该在某种程度上有所帮助。