请教上if(*char!='\0')可以做字符串结束的判定吗
请问下if(*char!='\0')可以做字符串结束的判定吗?
刚刚我写的这段代码,调试的时候,貌似根本就不会停下来,代码会继续处理空字符后面的字符。
还有一个问题。
这个运行可以正常的通过。
但是调试的时候,也会出现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;
}
- 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;
}