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? 展开
{
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? 展开
展开全部
sizeof 或者 char str[20] 都是编译时确定的,所谓compile-time。
动态的字符串或数组大小是运行时确定的,所谓run-time。无法用sizeof确定其占用内存大小的,sizeof(char *) 得到的是指针占用的内存大小(32位下为4字节)。
动态的字符串或数组必须保存分配的内存大小,比如标准库的vector或string中都有保存分配的内存大小。
以 fun(char* str) 方式传入是不对的,看Windows API 函数就可以发现传入char* str的函数必然同时有类似size的参数。
动态的字符串或数组大小是运行时确定的,所谓run-time。无法用sizeof确定其占用内存大小的,sizeof(char *) 得到的是指针占用的内存大小(32位下为4字节)。
动态的字符串或数组必须保存分配的内存大小,比如标准库的vector或string中都有保存分配的内存大小。
以 fun(char* str) 方式传入是不对的,看Windows API 函数就可以发现传入char* str的函数必然同时有类似size的参数。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
试用一下strlen(p),返回值是该串的实际使用长度.
如 char str[20]="0sffsfsdf";
结果是n=9
或者在fun()中多带一个长度参数(?)(哈哈哈...馊主意是吧?)
如 char str[20]="0sffsfsdf";
结果是n=9
或者在fun()中多带一个长度参数(?)(哈哈哈...馊主意是吧?)
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
唯一的解决办法就是增加一个长度参数
在字符串指针指向的内容是空字符结尾的字符串的时候,可以使用strlen来获取指向字符串的大小
但是实际指向内存块的大小,是无法知道的。
在字符串指针指向的内容是空字符结尾的字符串的时候,可以使用strlen来获取指向字符串的大小
但是实际指向内存块的大小,是无法知道的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
str是一个字符指针,sizeof(str)当然是一个字符指针的大小,通过指针是无法获取它指向的数组的大小
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询