我正在编写一个可以递归打印目录的程序, 下面是gdb调试段
请注意d_path(它是一个const char *作为参数传递给print_dir_tree) 在步骤“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)
答案 0 :(得分:0)
我需要确定你的代码,但如果你问是否可以更改const,答案是肯定的。如果你问它是如何改变的,那很简单,它就像一个常规变量一样对待,但它会在改变时给你一个警告。如果您尝试更改它并避免出现警告,则可以复制该变量,然后对其进行更改。