使用 C 语言非常原始。我正在编写一个将文件作为参数的程序,但这对于调试(GDB)来说相当烦人。不必每次在 GDB 中开始时重新键入文件列表,我宁愿将文件名存储在一个数组中并修改程序以读取该数组而不是 argv[] 值。
我从
FILE*[5] inpFiles;
inpFiles[0] = &file1.txt;
但这都是错误的。我需要获得对每个输入文件的某种引用,以便获得它的内存地址。
我怎样才能做到这一点?谢谢。
您可以在其中定义 GDB 命令,.gdbinit
因此您无需修改生产代码。例如,在您的~/.gdbinit
或.gdbinit
您的工作目录中添加以下行。
define do
run file1.txt file2.txt file3.txt file4.txt file5.txt
end
然后,在 GDB 中,只需键入 command do
,GDBrun file1.txt file2.txt file3.txt file4.txt file5.txt
就会为您运行。
您可以通过读取标准文件流 0 来解析包含每个文件的输入文件。
这样你就可以这样做:
./your_program < your_input_file
在 gdb 中,
run/r < your_input_file
但如果你想保留你的 args 方法,你也可以这样做:
./your_program `cat your_input_file`
希望这可以帮助。
FILE *
将写入一个数组:
FILE *inpFiles[5];
这可以存储从fopen()
或类似函数返回的值;它不存储文件名。
您可以将文件指针存储到&file1
表示的结构中,或者您可以创建一个新结构来存储名称和打开的文件指针(尽管您可能需要指定模式;默认情况下可能是“r”或“rb”)。
所以,向自己澄清你到底想做什么。您可以创建一个文件指针数组,或一个包含文件指针等内容的结构数组。但是你必须决定你将如何使用它以及语义将是什么。
这假定修改程序比使用 GDB 更好。如果您可以学习更强大地使用 GDB 的功能,那将是一个更好的主意。
例如,您能否使用元字符轻松指定文件:
run debug?.txt
您的文件在哪里,,,debug0.txt
... debug1.txt
?
其他答案也提出了替代方案。