关于C风格字符串的有关问题

关于C风格字符串的问题
程序如下:
#include <iostrea>
using   namespace   std;

const   char   *st= "hello   abc\n ";
int   main()
{
int   len=0;
while(*st++)
++len;
cout < <len < <endl;
return   0;
}

while(*st++)行结束的时候st指向空字符串还是空字符之后的字符???

书上说是后者,运行后面的程序时也是后者。。
我觉得是前者,结束条件是*st为false,即st指向空字符串
此时不再st++,为什么说上说st指向空字符之后的字符


------解决方案--------------------
*st++; //先判断*st, 然后st++的
*(++st); //这样就使你说的那样了,不过第一个字符却读不到了
------解决方案--------------------
写成这样:
while(*st)
{
++len;
st++;
}
循环结束后st就指向 "\0 "了
------解决方案--------------------
是后者啦!while(*st++)当 *str为空时退出循环,但是str++使str又+1了;