请教上if(*char!='\0')可以做字符串结束的判定吗

请问下if(*char!='\0')可以做字符串结束的判定吗?
C/C++ code

        while((*tail)!='\0')
            
            
            {
                q=tail;
                tail++;
                length++;
                if(*tail==' ')
                    break;
                    
            }


刚刚我写的这段代码,调试的时候,貌似根本就不会停下来,代码会继续处理空字符后面的字符。

还有一个问题。
C/C++ code
char str[]="abcdefg";
char *p;
p=str;


这个运行可以正常的通过。
但是调试的时候,也会出现error问题。

有几个问题。
p是如何分配其内存单元的呢。
是在栈,还是在堆呢。
我的理解是如下:
char *p;
会在栈中给p一个地址,存储该指针。然后p里面的指针会指向?1,空指针,堆?
p=str;

p会指向str的首地址?


还是完成一次赋值。
如果是赋值的话,p会指向哪块空间?常量区,还是堆区?
如果指向堆的话,那么会不会在堆中分配一个空间来存储一个空字符?

------解决方案--------------------
能不能判断关键在于你的“字符串”中有没有结束符'\n’。const *char有,而char[]就没有。
------解决方案--------------------
char str[]="abcdefg";这个是有结束符的!
下面这段例子是最好的证明

#include<iostream>
#include<stdlib.h>
using namespace std;

void swap(char *x,char *y)
{
char temp;
temp=*x;
*x=*y;
*y=temp;
}
int main()
{
char a[]="lhx zjc"; //当定义为char a*="lhx zjc"是为只读,是不可交换值的
char *head,*tail;
head=a;tail=a;
while(*tail!='\0') tail++;
tail--;
while(tail>head)
{
swap(head,tail);
head++;
tail--;
}
printf("%s\n",a);
system("pause");
return 0;
}