当前位置: 代码迷 >> C语言 >> [求助]一个文件的问题
  详细解决方案

[求助]一个文件的问题

热度:166   发布时间:2007-01-08 16:10:11.0
[求助]一个文件的问题

#include<stdio.h>
#include<string.h>
main()
{ int getstring(char filename[],char str[]);
char filename[10],str[100];
int m;
printf("please input the name of the file ");
scanf("%s",filename);
m=getstring(filename,str);
printf("%d\n",m);
printf("%s",str);

}
getstring(char filename[10],char str[100])
{ int i=0,n;
FILE *fp;
if((fp=fopen(filename,"r"))==NULL)
{printf("cannot open file \n");
exit(0);
}

while(!feof(fp))
str[i++]=fgetc(fp);
n=strlen(str);
return(n);
fclose(fp);
}
为什么以上程序最后输出时后面会出现一些莫名其妙的符号,而且输出的字符数也与实际的不相符合/?????

搜索更多相关的解决方案: 文件  

----------------解决方案--------------------------------------------------------

修改了一下:
#include<stdio.h>
#include <stdlib.h>
#include<string.h>
main()
{ int getstring(char filename[],char str[]);
char filename[10],str[100];
int m;
printf("please input the name of the file ");
scanf("%s",filename);
m=getstring(filename,str);
printf("%d\n",m);
printf("%s",str);

}
int getstring(char filename[10],char str[100])
{ int i=0,n;
FILE *fp;
if((fp=fopen(filename,"r"))==NULL)
{printf("cannot open file \n");
exit(0);
}

while(!feof(fp))
str[i++]=fgetc(fp);
n=strlen(str);
fclose(fp);
return(n);

}


----------------解决方案--------------------------------------------------------

谢谢了,可是结果不对啊,还是有很多字符在后面显示出来。


----------------解决方案--------------------------------------------------------
while(!feof(fp))
str[i++]=fgetc(fp);

str[i]='\0';
----------------解决方案--------------------------------------------------------
参照前便两位改了一下!呵呵!
[CODE]

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(void)
{
int getstring(char filename[], char str[]);
char filename[10],str[100];
int m;

printf("please input the name of the file: ");
scanf("%s", filename);
m = getstring(filename, str);
printf("%d\n", m);
printf("%s", str);

return 0;

}

int getstring(char filename[10], char str[100])
{
int i = 0, n;
FILE * fp;

if((fp=fopen(filename, "r")) == NULL)
{
printf("cannot open file.\n");
exit(0);
}

while(!feof(fp))
str[i++]=fgetc(fp);
str[i] = '\0';
n=strlen(str);
fclose(fp);

return(n);

}

[/CODE]
----------------解决方案--------------------------------------------------------
可否注意到这个程序当中的n值会比实际的字符串的长度大一!
----------------解决方案--------------------------------------------------------
数组的结尾有默认的\0所以就不用str[i] = '\0';

----------------解决方案--------------------------------------------------------
呵呵,你在哪里看到的?好像不是吧!
----------------解决方案--------------------------------------------------------
这里应该改为str[i - 1],在我的编译器上是这样的!
while(!feof(fp))
str[i++]=fgetc(fp);
假设文件中有两个字符,这个语句执行之后i的值为3。

----------------解决方案--------------------------------------------------------
我觉得跟你要打开的文件有关吧
我运行你的程序的时候没有错误
提示输入文件名
----------------解决方案--------------------------------------------------------
  相关解决方案