我在 C++ 项目中发现了以下代码。代码通过 C 风格的字符串向后移动。当我看到这个时,我认为这应该导致未定义的行为。但它似乎完美地工作:
const char * hello = "Hello World.";
const char * helloPointPos = strchr(hello, '.');
for (const char * curchar = helloPointPos; *curchar; curchar--) {
printf("%s", curchar);
}
我想知道的是*curchar; curchar--
. 这假定字符串以 \0 开头。这是一个合法的假设吗?这段代码是否会导致未定义的行为?如果不是,为什么不呢?
如果您能对此有所了解,我将不胜感激。BTW平台是Windows,编译器是VC++ 2010。
编辑:谢谢大家的参与。两个答案都很好,对我有帮助。但是因为我只能接受一个答案,所以我会选择 paxdiablo 的答案,因为它有更多的细节。谢谢!