c代码文本未显示

时间:2013-11-23 16:18:03

标签: c printf

iv编写了一部分代码,它基本上将文本从txt文件传输到变量并打印出来(作为程序的一部分),但它根本不打印内容。

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

#define WRONG_ARGUMENTS     (-1)

int Lines(FILE * file);
int Length(FILE * file);
int Read(FILE * file);
int Lines(FILE * file)
                {
                    int c=0,count=0;
                    ++count;
                    while(c!=EOF)
                    {
                        c=fgetc(file);
                        if(c=='\n')
                            ++count;
                    }
                    return count;
                }
                int Length(FILE * file)
                {
                    int c,count=0;
                    while((c=fgetc(file))!=EOF)
                    {
                        ++count;
                    }
                    return count;
                }

         int Reader(FILE * Text,char * File)
         {
             int counter=0;
             while(fscanf(Text,"%s",File)!=EOF)
             {
                 ++counter;
                 strcat(File," ");
             }
             return counter;
         }
int main(int argc,char * argv[]) {
    FILE * Text=NULL;


    if(argc!=2)
    {
        printf("usage:library text dictionary\n");
        return -1;
    }
    Text = fopen(argv[1],"r");
    if(Text==NULL)
    {
        printf("file %s could not be opened\n",argv[1]);
        return -1;
    }

        char * File = "";
         File=malloc(Length(Text)*(sizeof(char)));

int r = Reader(Text,File);
printf(File);

return 0;
}

我将非常乐意了解部分代码中的问题 输出是x>

感谢,

1 个答案:

答案 0 :(得分:1)

考虑以下减少的例子。您会注意到getFileLength函数(a)实际上没有读取文件中的任何内容,(b)使用fseekftell函数 - fseek是函数用于在文件指针到达EOF时重新定位文件指针。

想象一下,您没有打印数据,而是使用它做其他事情。如果文件长达十亿字节怎么办?我们肯定不想从中读取1,000,000,000次以确定其长度!

至于calloc的使用 - 它初始化它分配的数据。由于您正在阅读文本,因此您需要确保文本以NULL结尾。 (NULL通常= 0,虽然我已经看到了改变这个的邪恶宏)这个NULL终结符也是我分配比文件包含的多1个字节的原因。

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

long getFileLength(FILE *input)
{
    long result;
    long origPos = ftell(input);
    fseek(input, 0, SEEK_END);
    result = ftell(input);
    fseek(input, origPos, SEEK_SET);
    return result;
}

int main (void)
{
    FILE *fp;
    long fileLen, numBytesRead;
    char *data;

    fp = fopen("main.cpp", "rb");
    fileLen = getFileLength(fp);
    data = (char*)calloc(sizeof(char), fileLen+1);
    numBytesRead = fread(data, sizeof(char), fileLen, fp);
    if (numBytesRead != fileLen)
        printf("Error reading all bytes from file. Expected: %d, Read %d\n", fileLen, numBytesRead);
    else
        printf("%s", data);
    free(data);
    fclose(fp);
}