c语言字符串数组长度所占内存长度

2006年11月 VC/MFC大版内专家分月排行榜第三
2006年11月 VC/MFC大版内专家分月排行榜第三
2006年11月 VC/MFC大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。数组与字符串长度sizeof()、strlen()、string的length()和size()
、sizeof()---求所占的字节数
)、对于整型字符型数组
//求整型数组A所占的字节数
//i表示整型数组A所占的总空间的字节数
cout&&” i=sizeof(A)=
”&&i&&&&&&&&&&&&&&&
i=sizeof(A)/sizeof(int);&&&&&&&&&&&&&&
//此时i表示数字数组的元素个数
//求字符数组的所占的字节数
i=sizeof(B);&&&&&&&&&&
cout&&i&&&&&&&&&&&&&&&&&&&&
//结果为5*sizeof(char)=5
//求字符数组的元素个数
i=szieof(B)/sizeof(char);&&&&&&&&&&
i=sizeof(C);&&&&&&
//i为字符数组C所占的字节空间,为6,最后一个为’\0’
)、对于整型或字符型指针
int i=sizeof(*p);&&&&&&&
//此时i就是p所指的整型数组A的第一个元素A[0]的所占字节数
&&&&&&&&&&&&&& i=sizeof(P);& & & & & & // & & & & & p为整形指针,大小为定值为4 & &&
&&&&&&&&&&&&&
p=B;& //字符指针赋值,或char
*p=B;这样为字符指针初始化赋值
i=sizeof(p);& //p为字符指针,指针的大小为定值,为4
这是指B[0]所占空间的大小
cout&&i&&&& //结果为1
cout&&*p&&& //输出结果为字符a
cout&&p&&&&
cout&&hex&&(int)&(*p)&&"&&&&&& "&&&B&&& //输出结果两者相同
cout&&hex&&(int)p&&"&&&&& "&&&B&&&&&&&&&&&& //输出结果两者相同
、strlen()---字符数组或字符串所占的字节数
strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值。
--就是指实际字符串或字符数组的实际长度(不是所占空间的字节数)。
)、针对字符数组
&&&&&&&& char
A[6]={'a','b','\0','d','e','r'};
int i=strlen(A);&&&&&&&&& //i为2,因为到’\0’结束,故实际A[]只有2个元素
char *str="abcde";
&i=strlen(str);&&&&&&&&&& //i为5
A[6]={"abcdef"}; //error C2117: 'abcdef' : array bounds overflow
)、针对字符指针
C[]={"abcdef"};
&i=strlen(p1);&& //结果为6
i=strlen(D);& //这样,由于没指定D的内存分配大小,用求其长度会造成错误。
//如果为char D[5]={'a','c','q','f','w'};这样再用strlen求其长度也会造成错误,当D[]之中的数
//大于5才不会造成错误。
(3)、针对其他结构
  cout&&sizeof(X)&&
结果 12 ===》内存补齐
cout&&sizeof(x)&& 结果 12 同上
&&&&&&&&& 解释一下,在class X中,成员中最大的所占的空间为int类型所占的空间4个字节,故内存补齐,最后结果为: ((int)(实际成员所占内存空间的和/4)+1)*4
(4)、有关空类
一个空类占多少空间?多重继承呢?
class B:public A
class C:public virture B
class D:public A,public A2
int main()
cout&&"sizeof(A):
"&&sizoef(A)&&
cout&&"sizeof(B):
"&&sizeof(B)&&
cout&&"sizeof(C):
"&&sizeof(C)&&
cout&&"sizeof(D):
"&&sizeof(D)&&
结果:1 1 4 1
表明空类所占空间为1个字节,单一继承的空类空间也为1,多重继承的空类空间还是1,但虚继承涉及虚表(虚指针),所以sizeof(C)为
、sizeof()与strlen()区别
sizeof()返回的是变量声明后所占的内存数,不是实际长度,此外sizeof不是函数,仅仅是一个操作符,strlen是函数。
、c++中的字符串string的长度
str1=”xxxxx”;
i=str1.length();
cout&&”i=str1.length()=
”&&i&& //结果为5,因为5个x
i=tr1.size();
cout&&”str1.size()=
对于c++中的size()和lengt()没有区别,下面是它们的代码
size_type & __CLR_OR_THIS_CALL &
length() & const
{ // & return & length & of & sequence
return & (_Mysize);
size_type & __CLR_OR_THIS_CALL & size()
{ // & return & length & of & sequence
return & (_Mysize);
为了兼容等,这两个函数一样。
&length是因为沿用C语言的习惯而保留下来的,string类最初只有length,引入STL之后,为了兼容又加入了size,它是作为STL容器的属性存在的,便于符合STL的接口规则,以便用于STL的算法。
&&string类的size()/length()方法返回的是字节数,不管是否有汉字。&
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。【C语言求助】如何释放字符数组剩余的无用空间?【c语言吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:551,879贴子:
【C语言求助】如何释放字符数组剩余的无用空间?收藏
比如,我要输入一个字符串,保存在字符数组中,但是我们事先并不知道要输入的字符串的长度,我们就设置足够大的数组空间,比如Char a【50】,但是实际上可能我们输入的字符长度只有20,剩下的a【21】---a【50】完全就是没有使用的空间,C语言函数库里面有没有类似于释放数组空间的函数?
时光IT学院,免费在线直播教学,大牛现场答疑;拒绝纯理论学习,以c/c++/java项目实战为核心.针对c/c++/java零基础学员,快速入门,高薪就业.
我不是伸手党额= =在我们的教材书上找了很多都没有找到解决办法,&&& 倒是看到一个free()函数可以释放内存空间,但是不知道怎么用- -求达人指教……小弟万分感激
教材书上这么写的:calloc函数用于为具有N个元素的一维数组动态分配存储空间,每个元素长度为size个字节……但是后面的实例中它还是事先给N 设定了初始值,这不等于没有分配一样嘛……
静态分配用不扭曲的手法是不能〔释放〕的,因为根本就没有〔申请〕……
回复:3楼还有,区分下〔分配〕和〔操作〕
回复:5楼其实我是想完成这样一个操作:从键盘输入一串数字到一个int型数组中,但是我并不知道事先要输入几个数字,可能很多;之后经过一些过程,最后要用printf函数输出这个数组中的所有数字,该怎么做?用指针可以完成吗?
啊啊~~我懂了,先用malloc申请,再用free()释放……
我空间的/* * c.c * *
Created on:
Author: zhangqijun */#include&stdio.h&#include&stdlib.h&int main(){&&
int i=0,j=0,k=0,flag=1;&&
/**dynamic*/&&
ch=(char *)malloc(1*sizeof(char));&&&
/** whatever you input ,this can input the Array --&ch[]*/&&
while(flag)&&
ch[i]=getchar();&&
if(ch[i]=='\n')&&
ch=(char *)realloc(ch,1*sizeof(char));&&
printf("String length:%d\n",k);&&
puts("String input:");&&
for(j=0;j&k;j++)&&
printf("%c
",ch[j]);&&
return 0;}
其实可以强制覆盖
51CTO学院11年行业品牌,1400万用户选择,中国专业IT技能学习平台,c语言.通过在线学习的方式,帮助广大技术人员实现技能提升,高薪就业的职业梦想,c语言.
热插拔内存条最简便了````
那是string.h
其实变长缓冲区也是个经典话题了,毕竟每天都在用……
如果蛋疼的话可以用类似std::vector的动态增长的方式
Try alloca?
其实挂成链或者环,限定下最大长度,这样也可以吧……具体尺寸看读写速率了
用链式就不太好。。那个很慢
只是形状而已,限定最大长度的话用顺序存储就ok链式的话得配合内存池了……
If it doesn't escape, using alloca seems to be a good idea.
登录百度帐号推荐应用}

我要回帖

更多关于 c语言输入字符串数组 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信