0

我正在编写一个可以递归打印目录的程序,下面是 gdb 调试段

请注意,d_path(它是作为参数传递给 print_dir_tree 的 const char *)在“if (dr == NULL) {”步骤之前是“/home/cifer/.gftp”,但是,它被打印为“/home/ cifer/!\200" 在此子句之后

谁能告诉我为什么?多谢!

Breakpoint 1, print_dir_tree (d_path=0x805b058 "/home/cifer/.gftp", depth=4)

    at dir_demo.c:15

15      DIR *dr = opendir(d_path);

(gdb) print d_path

$2 = 0x805b058 "/home/cifer/.gftp"

(gdb) print d_path

$3 = 0x805b058 "/home/cifer/.gftp"

(gdb) step

16      if (dr == NULL) {

(gdb) print d_path

$4 = 0x805b058 "/home/cifer/!\200"

(gdb) step

20      struct dirent *de = NULL;

(gdb) print d_path

$5 = 0x805b058 "/home/cifer/!\200"

(gdb) step

21      while((de = readdir(dr)) != NULL) {

(gdb) print d_path

$6 = 0x805b058 "/home/cifer/!\200"

(gdb) 
4

1 回答 1

0

我需要查看您的代码才能确定,但​​如果您询问是否可以更改 const,答案是肯定的。如果您要问如何更改它,那很简单,它被视为常规变量,但它会在更改时向您发出警告。如果您尝试更改它并避免出现警告,您可以复制该变量,然后对其进行更改。

于 2012-06-05T20:45:00.647 回答