removeLineEndSpace
1 /****************************************************************************** 2 * removeLineEndSpace 3 * 声明: 4 * 该程序是之前alignBySpace的逆向补充程序,去掉行尾的空格。 5 * 6 * 2015-8-11 阵雨 深圳 南山平山村 曾剑锋 7 *****************************************************************************/ 8 #include <stdio.h> 9 #include <string.h> 10 #include <stdlib.h> 11 12 int main ( int argc, char ** argv ) { 13 14 int ret = 0; 15 char *tempFile = "generateFile.txt"; 16 char *readBuffer = NULL; 17 size_t bufferSize = 512; 18 int readBufferIndex = 0; 19 20 if ( argc != 2 ) { 21 printf ( "USAGE:\n" ); 22 printf ( " removeLineEndSpace <file>.\n" ); 23 return -1; 24 } 25 26 FILE *readfile = fopen ( argv[1], "r" ); // only read 27 FILE *writefile = fopen ( tempFile, "w" ); // only write 28 29 /** 30 * man datasheet: 31 * If *lineptr is NULL, then getline() will allocate a buffer for storing the line, 32 * which should be freed by the user program. (In this case, the value in *n is ignored.) 33 */ 34 while ( ( ret = getline( &readBuffer, &bufferSize, readfile ) ) != -1 ) { 35 36 readBufferIndex = ret - 1; // index for real position 37 38 while ( ( readBuffer [ readBufferIndex ] == ' ' ) || // del ' ', '\t', '\n' character 39 ( readBuffer [ readBufferIndex ] == '\n' ) || ( readBuffer [ readBufferIndex ] == '\t' ) ) 40 readBuffer [ readBufferIndex-- ] = '\0'; 41 42 readBuffer [ readBufferIndex + 1 ] = '\n'; 43 44 fputs ( readBuffer, writefile ); // write to file 45 46 bzero ( readBuffer, ret ); // clean buffer 47 } 48 49 free ( readBuffer ); // referrence getline() 50 51 fclose ( readfile ); 52 fclose ( writefile ); 53 54 remove ( argv[1] ); // delete source file 55 rename ( tempFile, argv[1] ); // tempfile rename to source file 56 }