gpt4 book ai didi

无法调用函数工作

转载 作者:行者123 更新时间:2023-11-30 15:02:51 26 4
gpt4 key购买 nike

我在 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 存在并且其中包含数据。我之前已经使用“内联代码”而不是函数成功打开了它。谢谢

最佳答案

您遇到的错误是您忘记传递有效的文件名。因此,要么程序崩溃,要么 fopen 尝试打开已废弃的名称并返回 NULL

char * RLY1F;    // This is not initialized!
RLY1F = "my_file.txt"; // initialize it!

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

您已经定义了一个指针数组char * rly1f[1500];

您读取了 1 个文件并将其存储在数组的第一个指针中rly1f[0]

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

while (n < 1000)  {
printf ("%c", rly1f[0][n]);
n++;
}

注意:如果读取的文件少于 1000,则不会崩溃,但会打印垃圾。(BLUEPIXY 建议对 n 顺便说一句进行后增量修复,或者跳过第一个字符)

因此,由于您的字符串以 null 结尾,所以做得更简单,将数组传递给 puts:

puts(rly1f[0]);

编辑:您在读取文件时也遇到问题。您malloc 1500 字节,但您完全读取了该文件。如果文件大于 1500 字节,则会出现缓冲区溢出。

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

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

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

注意:在 Windows 系统上,文本文件使用 \r\n (CRLF) 来分隔行,因此如果使用文本模式 (\r\n 会转换为 \n,因此缓冲区中的字符较少:一旦您知道了确切的大小,您就可以考虑使用 realloc删除未使用的分配空间)。

关于无法调用函数工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40940556/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com