首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

们,char *vexs,char *vexs[20]和char(*vexs)[20]的区别是什么

2012-03-09 
大虾们,char *vexs,char *vexs[20]和char(*vexs)[20]的区别是什么?看了不少帖子,可是还稀里糊涂的.好心的

大虾们,char *vexs,char *vexs[20]和char(*vexs)[20]的区别是什么?
看了不少帖子,可是还稀里糊涂的.好心的大大们帮下忙吧.先谢谢啦!~!

[解决办法]
1) char *vexs

字符指针,可以指向一个字符,也可以指向一段连续的字符串空间。

比如

char* vexs = new char;
*vexs = 'a ';

char* vexs = new char[128];
strncpy(vexs, "i love csdn ", sizeof(vexs));

char* vexs = "i love csdn "; // 这个是不可修改的


2)
char *vexs[20]

字符串数组,如上面,是20组合字符川

就是说其中

vexs[0] 到 vexs[19] 里面都存了 1) 类型(字符串)


3)

char(*vexs)[20]


vexs是一个指针,指向 char[20],这种类型的数据,可以是一个,也可以是n个

比如

char arry[1][20];
char (*vexs)[20] = arry;


char arry[30][20];
char (*vexs)[20] = arry;
[解决办法]
如果想定义城市名字的数组,数组的每一项用汉字字符串表示,应该怎么定义?
————————————————————————————————
就是定义成你第2种那个形式。。。

char *cityName[20];
for(i=0; i <20; i++) //分配空间。。
cityName[i] = (char *)malloc(20);

for(i=0; i <20; i++) //输入名字。
scanf( "%s ", cityName[i]);
[解决办法]
to 楼上的,先把下面的定义搞清楚了。
char *cityname[20];

他保存了20个指向字符串的指针,如果字符串指针指向城市名,就可以保存20个城市名。
接下来要对每个字符串指针分配内存,借用一下你楼上的
char *cityName[20];
for(i=0; i <20; i++) //分配空间。。
cityName[i] = (char *)malloc(20);

cityname[8]=(char *)malloc(20);//设要输入8个城市。你这样写只是对第9个字符串执政分配了20byte的内存。

strcpy(cityname[0], "北京 ");//程序编译不能通过.can 't convert char * to char.
---
strcpy(cityname[8], "北京 ");看看

[解决办法]
看楼上第一篇帖子的意思.如下是没有问题的
int citynum=2;
char *cityname;
cityname=(char *)malloc(citynum *sizeof(char));
strcpy(&cityname[0], "北京 ");
我想知道,为什么这样以后,输出城市名字是?

strcpy(&cityname[0], "北京 ");
这一句有错误,相当于strcpy(&cityname, "北京 ");
citypname指向2个长度的字符串指针,&cityname取这个指针的地址?什么意思呢?
strcpy的第一个参数是char*,你取得了char*的地址,也是个指针所以编译没有错误,就是不知道是什么了。
正确的写法是
strcpy(cityname, "北京 ");

你这段内存还有点溢出
cityname=(char *)malloc(citynum *sizeof(char));
北京 "是个两个字节长度的字符串,系统自动加上NULL结尾表示字符串的结束,所以正确的做法是你必须给他分配三个字符长度;
不信你free看看。

给你写一段小小的测试

#include <windows.h>
#include <stdio.h>
#include <iostream.h>

void main()
{
char* strr1;
strr1 = (char*)malloc(3); //把这儿改成2看看
strcpy(strr1, "ss ");

cout < < strr1 < <endl;
free(strr1);
getchar();
}

热点排行