无法调用函数工作

时间:2016-12-02 20:44:52

标签: c function input

我在Reading a file character by character in C找到了这段代码,它编译并且是我想要使用的。我的问题是我无法正常工作。代码如下:

char *readFile(char *fileName)
{
    FILE *file = fopen(fileName, "r");
    char *code;
    size_t n = 0;
    int c;

    if (file == NULL)
        return NULL; //could not open file
    code = malloc(1500);

    while ((c = fgetc(file)) != EOF)
    {
        code[n++] = (char) c;
    }
    code[n] = '\0';

    return code;
}

我不确定如何调用它。目前我使用以下代码来调用它:     .....

char * rly1f[1500];
char * RLY1F;    // This is the Input File Name
rly1f[0] = readFile(RLY1F);
if (rly1f[0] == NULL) { 
    printf ("NULL array); exit;
}
int n = 0;
while (n++ < 1000)  {
    printf ("%c", rly1f[n]);
}
.....

如何调用readFile函数使得我有一个非NULL的数组(rly1f)?文件RLY1F存在并且其中包含数据。我之前使用'在线代码'而不是函数成功打开了它。 感谢

1 个答案:

答案 0 :(得分:1)

您遇到的错误是您忘记传递有效的文件名。因此,程序崩溃,或textToReplace = randint(1990, 2020)尝试打开已删除的名称并返回fopen

NULL

您将遇到的下一个问题是在您的循环中打印字符。

您已经定义了一组指针char * RLY1F; // This is not initialized! RLY1F = "my_file.txt"; // initialize it!

您读取1个文件并将其存储在数组char * rly1f[1500];

的第一个指针中

但是当你显示它时,你将指针值显示为不是你想要的字符。你应该这样做:

rly1f[0]

注意:如果读取的文件小于1000,则不会崩溃但会打印垃圾。 (BLUEPIXY建议while (n < 1000) { printf ("%c", rly1f[0][n]); n++; } BTW或第一个字符的后增量修正被跳过)

所以更简单,因为你的字符串是nul终止的,将数组传递给n

puts

编辑:您在阅读文件时遇到问题。您puts(rly1f[0]); 1500字节,但您完全读取了该文件。如果文件大于1500字节,则会出现缓冲区溢出。

在分配内存之前,您必须计算文件的长度。例如这样(使用malloc可能是更好的选择):

stat

注意额外参数,它允许您返回大小以及文件数据。

注意:在Windows系统上,文本文件使用char *readFile(char *fileName, unsigned int *size) { ... fseek(file,0,SEEK_END); // set pos to end of file *size = ftell(file); // get pos, i.e. size rewind(file); // set pos to 0 code = malloc(*size+1); // allocate the proper size plus one (CRLF)来分隔行,因此如果使用文本模式(\r\n被转换,分配的大小将高于读取的字符数至\r\n,因此缓冲区中的字符数较少:一旦知道了准确的大小,就可以考虑\n来削减未使用的已分配空间。