UC编程:字符读取与行读取

字符读取函数的应用 下面的演示程序实现从/etc/passwd文件中提取用户名,打印到屏幕上并保存在copyname.txt文件中 使用的函数是getc()、putc()、putchar() [c] #include <stdio.h> int main() { FILE *fpr, *fpw; int c = 0, f = 0; /* 以下打开源文件 */ if((fpr = fopen("/etc/passwd", "r")) == NULL) { printf("open file /etc/passwd failes. "); return; } /* 以下打开目标文件*/ if((fpw = fopen("./copyname.txt", "w")) == NULL) { printf("open file ./copyname.txt failed. "); fclose(fpr); return; } while((c = getc(fpr)) != EOF) { /* 字符已经读取到了c */ if(f == 0) { if(c != ':') putchar(putc(c, fpw)); else f = 1; } else if(c == ' ') { f = 0; putchar(putc(c, fpw)); } } fclose(fpr); fclose(fpw); return 0; } [/c] 行读写函数的应用 下面这个演示程序是按行来获取数据的 [c] #include <stdio.h> int main() { FILE *fpr, *fpw; char buf[1024], *p1, *p2; /* 打开源文件 */ if((fpr = fopen("/etc/passwd", "r")) == NULL) { printf("open /etc/passwd file failed. "); return; } /* 打开目标文件 */ if((fpw = fopen("./copynameid.txt", "w")) == NULL) { printf("open ./copynameid.txt failed. "); fclose(fpr); return; } memset(buf, 0, sizeof(buf)); while(fgets(buf, sizeof(buf), fpr) != NULL) { /* p1指向第一个":",p2指向第二个":" */ if((p1 = strstr(buf, ":")) == NULL) break; if((p2 = strstr(p1+1, ":")) == NULL) break; p1++; p2++; /* p1指向第二个域密码字段,p2指向第三个域用户ID字段 */ /* 以下代码移动字符串内容,将ID字段的内容移动到用户名字段后 */ while(*p2 != ':') { *p1 = *p2; p1++; p2++; } *p1 = 0; /* 屏幕输出 */ puts(buf); /* 文件输出 */ fputs(buf, fpw); fputs(" ", fpw); /* 清楚内存 */ memset(buf, 0, sizeof(buf)); } fclose(fpr); fclose(fpw); return 0; } [/c] 输出省略。这个程序很有意思的地方是在buf中利用指针直接判断并修改数据 越学越有意思呢
原文地址:https://www.cnblogs.com/ishell/p/4240147.html