我想输入文件名,然后显示文件内容(包含数字行)。我使用的代码是:
#include <stdio.h>
#include <stdlib.h>
void main(int argc,char *argv[])
{
FILE *file;
file = fopen(argv[1],"r");
char line[100];
while(!feof(file)){
fgets(line,100,file);
puts(line);
}
fclose(file);
}
当我尝试在代码块中运行程序时,它只是崩溃了程序。我尝试在Xcode中运行,我收到消息Segmentation fault:11然后程序退出。有人可以帮忙吗?
好的,所以我尝试了另一种方式,但仍然没有成功:
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
int main(int argc,char *argv[])
{
FILE *file;
char line[100];
file = fopen(argv[1],"r");
do {
char c = fgetc(file);
if (c == EOF) break;
memset(line,0,100);
while ((c != '\n') && (c != EOF)) {
c = fgetc(file);
}
printf("%s",line);
} while (true);
fclose(file);
}
答案 0 :(得分:0)
试试这个:(确保要读取的文件位于同一目录中)
void main(int argc,char *argv[])
{
FILE *file;
char ch;
if (argc > 1) {
file = fopen(argv[1],"r");
//you can use argv[1] ...
// check if file is there ...
if( file == NULL )
{
//opening error...handle it by exit()...
printf("error...");
}
while( ( ch = fgetc(file) ) != EOF ){
printf("%c",ch);
exit(0);
}
fclose(file);
}else{
printf("Not enough args");
exit(0);
}
}
或者您可以直接调用不带参数的文件....
#include <stdio.h>
#include <string.h>
main()
{
FILE *fp;
char buff[255];
fp = fopen("input.txt", "r");
if( fp != NULL ){
while ( !feof(fp ) ){
memset(buff, '\0', sizeof( buff) );
fgets(buff, 255, (FILE*)fp);
printf("%s", buff );
}
fclose(fp);
}
}
input.txt应该在此代码文件的同一目录中...
答案 1 :(得分:0)
错误的EOF检测。
fgets()
的返回值将通知是否已读取任何数据。检查feof()
为时已晚。
if (file == NULL) Handle_OpenError();
//while(!feof(file)){
// fgets(line,100,file);
while (fgets(line,100,file) != NULL) {
puts(line);
}
注意:fputs(line, stdout);
而不是puts(line);
,以避免额外的'\n'
。