我在Ubuntu上调试我的C ++代码,我执行./main path < input.txt
argv[1]
应该包含一个字符串“path”,由下面的GDB验证。
但是,即使argv[1] == "path"
应该返回true,程序也会跳过我的第一个条件。
有什么想法吗?
...
(gdb) n
181 if(argv[1] == "path")
(gdb) p argv[1]
$1 = 0xbffffba3 "path"
(gdb) n
183 else if(argc == 1)
(gdb)
答案 0 :(得分:2)
即使两个字符串相同,它们也会在内存中占据不同的位置。当检查argv[1]
是否等于固定字符串"path"
时,它不是逐个字符地执行它:它正在查看是否指向固定字符串{{1 }}与传递到"path"
的{{1}}变量相同,但不是。{/ p>
您需要使用strcmp来测试这两个字符串的相等性:
argv[1]