我在C中执行一个程序,逐行更改文件的行顺序。问题是,一旦我应用函数"更改",它首先打印一个空行。
这是可以在不反转文件第一行的情况下运行的代码,注释是替换fprintf( stdout, "%s", fgets(line, 2048, file));
的行
#include <stdio.h>
#include <unistd.h>
#include <sysexits.h>
#include <stdlib.h>
#include <string.h>
char* change ( char *word ){
int i;
int j;
char aux;
for(i=0, j=strlen(word)-1 ; i<j ; i++, j--){
aux=word[i];
word[i]=word[j];
word[j]=aux;
}
return word;
}
int main(int argc, char *argv[])
{
char line[2048];
FILE *file;
file = fopen( argv[1], "r" );
printf( "File: %s -> ", argv[1] );
if( file )
printf( "Exists (OPEN)\n" );
else
{
printf( "Error (CAN'T OPEN)\n" );
return 1;
}
printf( "The first line of the file: %s\n\n", argv[1] );
/*fprintf( stdout, "%s", change(line) );*/
fprintf( stdout, "%s", fgets(line, 2048, file));
if( !fclose(file) )
printf( "\nFile closed\n" );
else
{
printf( "\nError: can't close \n" );
return 1;
}
return 0;
}
使用文件days.txt
Monday
Tuesday
...
使用fprintf( stdout, "%s", fgets(line, 2048, file));
打印Monday
,但fprintf( stdout, "%s", change(line) );
应打印yadnoM
,但打印空行并且我不知道原因。 (请注意,我在Ubuntu编程)
提前致谢。
答案 0 :(得分:1)
我没有验证您代码的其他部分..
但对于这部分......
在调用这个fprintf之前(stdout,“%s”,更改(line)); ...你必须从文件中复制缓冲行中的数据...而不是在'line'中复制你传递这个以改变功能
你应该这样做
fprintf( stdout, "%s", fgets(line, 2048, file));
fprintf( stdout, "%s", change(line) );
或
fgets(line, 2048, file);
fprintf( stdout, "%s", change(line) );
答案 1 :(得分:0)
看起来当你运行fgets()时,它会读取整行,包括换行符\ n。
所以当你运行change(fgets(line, 2048, file))
时,它基本上将\ n移动到文件的开头,所以你得到一个空行。