Char* x 、 Char *x、Char x的区别

时间:2022-05-23 21:39:14
如题,目标如下
char Comm[64];
Comm[0]="1"
Comm[1]=","
Comm[2]="2"
Comm[3]=","
....
还有一数组Temp
char temp
temp[0]="1"
temp[1]="2"
也就是将Comm数组里的凡是有“,”的去掉,然后赋值给temp,转换函数我这样写的:
Convert(CHAR* OldCharArray, CHAR* NewCharArray, CString Separater)
{
int i=0;
for (;i<strlen(OldCharArray);i++)
{
if (OldCharArray[i]!=Separater)
{
NewCharArray[i]=OldCharArray[i];

else
{
NewCharArray[i]=OldCharArray[i+1];
i=i+1;
}
}
}

调用时如下:
CHAR *temp;
Convert(Comm,temp,",");
可是为什么一执行就会产生错误报告呢!所以请大家解释一下,Char* x 、 Char  *x、Char x,还有CCHAR 定义的变量的区别,

14 个解决方案

#1



char Comm[64]; 
Comm[0]="1" 
Comm[1]="," 
Comm[2]="2" 
Comm[3]="," 
.... 
还有一数组Temp 
char temp 
temp[0]="1" 
temp[1]="2" 
//这些因为是字符数组 Comm[0]='1'要用单引号

#2


还有char temp[20]和char temp有区别吗?

#3


引用 1 楼 lzr4304061988012 的回复:
C/C++ code
char Comm[64]; 
Comm[0]="1" 
Comm[1]="," 
Comm[2]="2" 
Comm[3]="," 
.... 
还有一数组Temp 
char temp 
temp[0]="1" 
temp[1]="2" 
//这些因为是字符数组 Comm[0]='1'要用单引号

这是我打字出来的错误!呵呵程序里赋值应该是不会错的!

#4


引用 2 楼 guokelei 的回复:
还有char temp[20]和char temp有区别吗?

char temp[20]字符数组,包含20个字符
char temp 字符类型,就一个字符

lz该看一些基本的c/c++的书籍了

#5


char* x 和char *x是一样的表示指向字符的指针,char x是字符变量喽,CCHAR我还没见过。。。
char* x方式声明的数组定义后是不允许修改的,所以会报错。

#6



Convert(CHAR* OldCharArray, CHAR* NewCharArray, CString Separater) 

int i=0; 
int j=0;
for (;i <strlen(OldCharArray);i++) 

if (OldCharArray[i]!=Separater) 

NewCharArray[j++]=OldCharArray[i]; 






#7


char *a跟 char* a没有任何区别,不过最好用第二种方式,不然在声明多个时可能会产生误解!


如:char* a,b;
   char *a,b;
上面的容易误认为a跟b是一样的 !

#8


嘿嘿!CCHAR可以是我装了那个Visual Actix的原因吧!是个VC++辅助工具。老出问题,郁闷呀!是该好好看看书了!

#9


你定义的CHAR* TEMP只是定义了一个指针,没有赋给它值,也就是说指针指向哪里是不知道的。这个时候传到函数里做:
NewCharArray[i]=OldCharArray[i];
就会错。
要给它开一块内存用来存内容,比如char TEMP[20];,或者char* TEMP = malloc(sizeof(char)*20);

#10


CHAR *temp指向哪里?就给它赋值啦

#11


char* x和char *x都是表示字符指针变量,给各长度就相当于是字符串
char x是字符变量

初学者经常犯的一个错误就是,认为定义了指针变量就会自动给他分配空间,实则不是这样
定义char x会自动分配空间给x,但是char* x是不会的,需要手动分配
可以这样分配

char * temp=new char[20];


分配之后最好要初始化

char * temp=new char[20];
memset(temp,0,20);


用new分配的空间在使用完之后要手动删除,不然会出问题的

char * temp=new char[20];
memset(temp,0,20);
       .
       .
       .
delete []temp;




当然,你也可以简单的用

char temp[20]={0};

这里的temp也是字符指针

#12


用两个下标,一个i,一个j,分别指向OldCharArray和NewCharArray;

#13


mark

#14


引用 6 楼 lzr4304061988012 的回复:
C/C++ code
Convert(CHAR* OldCharArray, CHAR* NewCharArray, CString Separater) 

int i=0; 
int j=0;
for (;i <strlen(OldCharArray);i++) 

if (OldCharArray[i]!=Separater) 

NewCharArray[j++]=OldCharArray[i]; 




这只能过滤到有规律的“,”
对于不规律的没有办法,发现不能实现的我的功能,所以我重写了,不是用Char,
代码如下:
void CJBSZ::Convert(CHAR* OldCharArray,CString NewStrArray[128],CString Separater)
{
int i=0;
int j=0;
CString temp;
for (;i<strlen(OldCharArray);i++)
{

temp=temp+OldCharArray[i];
if (OldCharArray[i]==Separater)
{

temp=temp.Left(temp.GetLength()-1);
j=j+1;
NewStrArray[j]=temp;
temp="";
}
  if (OldCharArray[i]!=Separater)
{
NewStrArray[j]=temp;
}

}

#1



char Comm[64]; 
Comm[0]="1" 
Comm[1]="," 
Comm[2]="2" 
Comm[3]="," 
.... 
还有一数组Temp 
char temp 
temp[0]="1" 
temp[1]="2" 
//这些因为是字符数组 Comm[0]='1'要用单引号

#2


还有char temp[20]和char temp有区别吗?

#3


引用 1 楼 lzr4304061988012 的回复:
C/C++ code
char Comm[64]; 
Comm[0]="1" 
Comm[1]="," 
Comm[2]="2" 
Comm[3]="," 
.... 
还有一数组Temp 
char temp 
temp[0]="1" 
temp[1]="2" 
//这些因为是字符数组 Comm[0]='1'要用单引号

这是我打字出来的错误!呵呵程序里赋值应该是不会错的!

#4


引用 2 楼 guokelei 的回复:
还有char temp[20]和char temp有区别吗?

char temp[20]字符数组,包含20个字符
char temp 字符类型,就一个字符

lz该看一些基本的c/c++的书籍了

#5


char* x 和char *x是一样的表示指向字符的指针,char x是字符变量喽,CCHAR我还没见过。。。
char* x方式声明的数组定义后是不允许修改的,所以会报错。

#6



Convert(CHAR* OldCharArray, CHAR* NewCharArray, CString Separater) 

int i=0; 
int j=0;
for (;i <strlen(OldCharArray);i++) 

if (OldCharArray[i]!=Separater) 

NewCharArray[j++]=OldCharArray[i]; 






#7


char *a跟 char* a没有任何区别,不过最好用第二种方式,不然在声明多个时可能会产生误解!


如:char* a,b;
   char *a,b;
上面的容易误认为a跟b是一样的 !

#8


嘿嘿!CCHAR可以是我装了那个Visual Actix的原因吧!是个VC++辅助工具。老出问题,郁闷呀!是该好好看看书了!

#9


你定义的CHAR* TEMP只是定义了一个指针,没有赋给它值,也就是说指针指向哪里是不知道的。这个时候传到函数里做:
NewCharArray[i]=OldCharArray[i];
就会错。
要给它开一块内存用来存内容,比如char TEMP[20];,或者char* TEMP = malloc(sizeof(char)*20);

#10


CHAR *temp指向哪里?就给它赋值啦

#11


char* x和char *x都是表示字符指针变量,给各长度就相当于是字符串
char x是字符变量

初学者经常犯的一个错误就是,认为定义了指针变量就会自动给他分配空间,实则不是这样
定义char x会自动分配空间给x,但是char* x是不会的,需要手动分配
可以这样分配

char * temp=new char[20];


分配之后最好要初始化

char * temp=new char[20];
memset(temp,0,20);


用new分配的空间在使用完之后要手动删除,不然会出问题的

char * temp=new char[20];
memset(temp,0,20);
       .
       .
       .
delete []temp;




当然,你也可以简单的用

char temp[20]={0};

这里的temp也是字符指针

#12


用两个下标,一个i,一个j,分别指向OldCharArray和NewCharArray;

#13


mark

#14


引用 6 楼 lzr4304061988012 的回复:
C/C++ code
Convert(CHAR* OldCharArray, CHAR* NewCharArray, CString Separater) 

int i=0; 
int j=0;
for (;i <strlen(OldCharArray);i++) 

if (OldCharArray[i]!=Separater) 

NewCharArray[j++]=OldCharArray[i]; 




这只能过滤到有规律的“,”
对于不规律的没有办法,发现不能实现的我的功能,所以我重写了,不是用Char,
代码如下:
void CJBSZ::Convert(CHAR* OldCharArray,CString NewStrArray[128],CString Separater)
{
int i=0;
int j=0;
CString temp;
for (;i<strlen(OldCharArray);i++)
{

temp=temp+OldCharArray[i];
if (OldCharArray[i]==Separater)
{

temp=temp.Left(temp.GetLength()-1);
j=j+1;
NewStrArray[j]=temp;
temp="";
}
  if (OldCharArray[i]!=Separater)
{
NewStrArray[j]=temp;
}

}