1

使用 C 语言非常原始。我正在编写一个将文件作为参数的程序,但这对于调试(GDB)来说相当烦人。不必每次在 GDB 中开始时重新键入文件列表,我宁愿将文件名存储在一个数组中并修改程序以读取该数组而不是 argv[] 值。

我从

FILE*[5] inpFiles;
inpFiles[0] = &file1.txt;

但这都是错误的。我需要获得对每个输入文件的某种引用,以便获得它的内存地址。

我怎样才能做到这一点?谢谢。

4

3 回答 3

3

您可以在其中定义 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就会为您运行。

于 2013-02-20T00:42:35.793 回答
2

您可以通过读取标准文件流 0 来解析包含每个文件的输入文件。

这样你就可以这样做:

 ./your_program < your_input_file

在 gdb 中,

  run/r < your_input_file

但如果你想保留你的 args 方法,你也可以这样做:

  ./your_program `cat your_input_file`

希望这可以帮助。

于 2013-02-20T00:46:49.457 回答
1

FILE *将写入一个数组:

FILE *inpFiles[5];

这可以存储从fopen()或类似函数返回的值;它不存储文件名。

您可以将文件指针存储到&file1表示的结构中,或者您可以创建一个新结构来存储名称和打开的文件指针(尽管您可能需要指定模式;默认情况下可能是“r”或“rb”)。

所以,向自己澄清你到底想做什么。您可以创建一个文件指针数组,或一个包含文件指针等内容的结构数组。但是你必须决定你将如何使用它以及语义将是什么。


这假定修改程序比使用 GDB 更好。如果您可以学习更强大地使用 GDB 的功能,那将是一个更好的主意。

例如,您能否使用元字符轻松指定文件:

run debug?.txt

您的文件在哪里,,,debug0.txt... debug1.txt

其他答案也提出了替代方案。

于 2013-02-20T00:43:03.990 回答