C语言读取文件

要读的文档:
4
asd
fdas
geqr
trew
第一行的数字代表了有多少个单词,每行只有一个单词,要读取然后显示在c里面,
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
*
*/
char **readWords(int *nPtr);
int main(int argc, char** argv) {
int *k;
readWords(k);

return (EXIT_SUCCESS);
}
char **readWords(int *nPtr){
FILE*input_file=fopen("input.txt","r");
int n;
fscanf(input_file,"%d",&n);
*nPtr=n;

char**str;
str=malloc(n*sizeof(char*));
char x;
int i,len;

for (i=0;i<n;i++){
fscanf(input_file,"%s",&x);
len = strlen(x);
str[i]=malloc(len*sizeof(char));
str[i]=x;
printf("%s",str[i]);
}

}
这是我的code,不知道为什么不能运行,求高人指点

第1个回答  2013-10-29
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
 *
 */

char **readWords(int *nPtr);

int main(int argc, char** argv)
{
    int *k;
    readWords(k);
    return (EXIT_SUCCESS);
}
char **readWords(int *nPtr)
{
    FILE * input_file=fopen("input.txt","r");
    int n;
    fscanf(input_file,"%d",&n);
    *nPtr=n;

    char**str;
    str=malloc(n*sizeof(char*));
    //char x;
    //你是要读取一个字符串!不是一个char字符!
    char x[1024];
    //不能确定读取的字符串长度!
    int i,len;

    for (i=0; i<n; i++)
    {
        fscanf(input_file,"%s",&x);
        //建议改成fgets,防止出现溢出!
        len = strlen(x);
        str[i]=malloc(len*sizeof(char));
        str[i]=x;
        printf("%s",str[i]);
    }

}

你的代码太繁琐,已经帮你改正了。

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

int main()
{
int n;
FILE * fp = fopen("input.txt","r");
if(!fp)
{
printf("can't open file.");
return -1;
}
else
{
fscanf(fp,"%d",&n);
fgetc(fp);
char str[n][1024];
int idx;
for(idx=0;idx<n;idx++)
{
fgets(str[idx],1024,fp);
}
for(idx=0;idx<n;idx++)
{
printf("%s",str[idx]);
}
return 0;
}
return 0;
}

这是我的写法。如果要封装成函数,只要把定义变长数组的代码换成malloc就可以了。

追问

不是啊,,我这题要求我那个function的原型不能改啊。。。。你这改得太厉害了= =

追答

上面的第一个代码是直接修改好了的....Mingw3.4.5编译无错

第2个回答  2013-10-29
int main(int argc, char** argv) {
    int k;//
    readWords(&k);///
    
    return (EXIT_SUCCESS);
}
char **readWords(int *nPtr){
    FILE*input_file=fopen("input.txt","r");
    int n;
    fscanf(input_file,"%d\n",&n);
    *nPtr=n;

    char **str = (char **)malloc(n*sizeof(char*));
    char x[100];/////
    int i,len;
    
    for (i=0;i<n;i++){
        fscanf(input_file,"%s\n",x);
        len = strlen(x);
        str[i]=(char *)malloc(len*sizeof(char));
        strcpy(str[i],x);////
        printf("%s\n",str[i]);
    }
    return str;/////
}

追问

你这个code我运行不了啊。。

追答

不会是头文件你没加吧。。。

追问

完全一样啊,,,我这里就run fail了,那3个include我都写了,太长截不了图

追答

编译无误运行错误是吧。
几个fscanf里面的\n都去掉试试。不同编译器对这个处理不同。
如果还是有问题只能单步调试看看了,运行错误可能的原因有些无法单纯分析出来,VC6运行无误。

本回答被提问者采纳
第3个回答  2013-10-29
额 这句是什么str[i] = x?
相似回答
大家正在搜