C++ 怎么得到字符串指针指向的内存块的大小?

voidfun(char*str){intn=sizeof(str);//B}voidmain(){charstr[20]={0};intsize=sizeof(str)... void fun(char* str)
{
int n=sizeof(str); //B
}

void main()
{
char str[20]={0};
int size=sizeof(str); //A
fun(str);
}

如上一段代码,在main函数中声明了一个str字符数组,测试发现A句size的值和B句n的值不一样,B句的值永远是4,而size等于str数组的大小20。有资料说当把str作为参数传递到fun函数中时它已经退化成指针,所以函数中sizeof运算的结果总是4.
那有没有什么办法在fun函数中得到str指向的内存块的真正大小,也就是这里的20?
展开
 我来答
传薪网络
推荐于2016-09-17 · TA获得超过1355个赞
知道小有建树答主
回答量:635
采纳率:92%
帮助的人:242万
展开全部
  唯一的解决办法就是增加一个长度参数
  在字符串指针指向的内容是空字符结尾的字符串的时候,可以使用strlen来获取指向字符串的大小
  但是实际指向内存块的大小,是无法知道的。
  这是因为指针在作为参数传递的时候,只传过来了地址值,而没有传过来任何长度信息
  实际上指针的长度信息是编译阶段获取的,而函数参数无法包含这种信息,故而不可能从指针参数获得指向空间的大小,即是貌似可以的方法,得到的长度也是不可靠的
fox000002
推荐于2018-03-13 · TA获得超过3827个赞
知道大有可为答主
回答量:2356
采纳率:97%
帮助的人:1179万
展开全部
sizeof 或者 char str[20] 都是编译时确定的,所谓compile-time。
动态的字符串或数组大小是运行时确定的,所谓run-time。无法用sizeof确定其占用内存大小的,sizeof(char *) 得到的是指针占用的内存大小(32位下为4字节)。
动态的字符串或数组必须保存分配的内存大小,比如标准库的vector或string中都有保存分配的内存大小。
以 fun(char* str) 方式传入是不对的,看Windows API 函数就可以发现传入char* str的函数必然同时有类似size的参数。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fallx
推荐于2017-11-23 · TA获得超过5485个赞
知道大有可为答主
回答量:2321
采纳率:73%
帮助的人:718万
展开全部
试用一下strlen(p),返回值是该串的实际使用长度.
如 char str[20]="0sffsfsdf";
结果是n=9
或者在fun()中多带一个长度参数(?)(哈哈哈...馊主意是吧?)
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
招子濯0jW
2018-03-13 · TA获得超过3289个赞
知道大有可为答主
回答量:5932
采纳率:0%
帮助的人:1141万
展开全部
唯一的解决办法就是增加一个长度参数
在字符串指针指向的内容是空字符结尾的字符串的时候,可以使用strlen来获取指向字符串的大小
但是实际指向内存块的大小,是无法知道的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
windos2011
2018-03-13 · TA获得超过233个赞
知道小有建树答主
回答量:251
采纳率:84%
帮助的人:173万
展开全部
str是一个字符指针,sizeof(str)当然是一个字符指针的大小,通过指针是无法获取它指向的数组的大小
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(9)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式