#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。
----------------解决方案--------------------------------------------------------
我觉得跟你要打开的文件有关吧
我运行你的程序的时候没有错误
提示输入文件名
----------------解决方案--------------------------------------------------------