gpt4 book ai didi

c - 可变参数函数 - 读取文件 (c)

转载 作者:太空宇宙 更新时间:2023-11-04 07:06:29 25 4
gpt4 key购买 nike

我需要创建一个可变参数函数(stdarg 库),它将遍历我传递给它的所有文件,并计算与我作为参数传递的单词相似的单词,

#include <stdio.h>
#include <stdarg.h>

void countWords(char* name, FILE* file, ...){
va_list params;
FILE* currentFile;
FILE* f;
int words = 0;

va_start(params, file);
currentFile = file;

while (currentFile != NULL)
{

f = fopen(currentFile, "r+"); //which file should i open every time? this doesnt compile

// comparing words in each file code

currentFile = va_arg(params, FILE*);
}
va_end(params);
}

我无法读取文件(无论我尝试什么都无法编译),以及如何遍历每个文件来比较我的单词?我真的很感激指导

谢谢!

最佳答案

如果您要传递文件名或更准确地说是文件的路径,那么这

FILE *currentFile;
currentFile = va_arg(params, FILE *);

应该是

char *currentFile;
currentFile = va_arg(params, char *);

如果传递 FILE 指针,则不应打开它们,因为如果程序的其余部分正确,则它们应该已经在函数内部打开,否则传递没有任何意义FILE * 的。

所以功能大概应该是

#include <stdio.h>
#include <stdarg.h>

void countWords(char *word, char *filename, ...)
{
va_list params;
FILE *file;
int words;

words = 0;
va_start(params, file);
while (filename != NULL)
{
file = fopen(filename, "r+");
// comparing words in each file code
filename = va_arg(params, char *);
}
va_end(params);
}

你可以这样调用它

countWords("example", "/path/to/file/1", ..., "/path/to/file/n", NULL);

在这种情况下,你应该小心字符串文字可能使用 const 限定符,因为即使参数不是字符串文字,在 countWords 中修改它们也没有意义() 以防止意外修改它们 const 可能会有所帮助,尽管您始终可以随时修改它们。即使修改字符串文字会调用未定义的行为,您也不能完全禁止您的程序这样做。

关于c - 可变参数函数 - 读取文件 (c),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32605559/

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