一个关于string 的简单问题!

xuanfeng007 2009-01-08 12:13:48

string str;
str=(char*)malloc(2);
str[0]=char(1);
str[1]=char(2);

int datasize;
datasize=str.length();


用这种方式,为什么得到的datasize为24,而不是2 ?
...全文
124 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wiowei 2009-01-08
  • 打赏
  • 举报
回复
缺少字符串结束符'\0'
ilovedrv 2009-01-08
  • 打赏
  • 举报
回复
string str;
str=(char*)malloc(2);


这个类型转换,必须保证(char*)malloc(2)缓冲区有一个字符串结束符'\0',否则会出现不可预料的结果

char *p =(char*)malloc(2);

p[1] = 0;

str = p;

oyljerry 2009-01-08
  • 打赏
  • 举报
回复
string会动态分配内存,str[2] = '\0'
wutaihua 2009-01-08
  • 打赏
  • 举报
回复
[Quote=引用楼主 xuanfeng007 的帖子:]
C/C++ code
string str;
str=(char*)malloc(2);
str[0]=char(1);
str[1]=char(2);

int datasize;
datasize=str.length();




用这种方式,为什么得到的datasize为24,而不是2 ?
[/Quote]

------------------------------------------------
首先说,你这么用String是错误的用法,如果用string的话,建议楼主你去多看看关于String的应用函数

其次你用malloc申请的内存并不可以用strlen(char*p)这个函数来计算长度。这个是与malloc的内存结构决定的。malloc内存在申请的时候,会多申请一段内存,在这块内存的前面,他首先会记录内存的使用情况,然后在记录数据的后面,才是你的可用内存,用你的方法是将所有的内存记录在内了,当然是大于这个数字了。正确的计算方式是包含malloc.h这个头文件,然后用size_t _msize(char *p)来计算

MSDN上有一个应用这个函数计算机的例子,你看一下

void main( void )
{
long *buffer;
size_t size;

if( (buffer = (long *)malloc( 1000 * sizeof( long ) )) == NULL )
exit( 1 );

size = _msize( buffer );
printf( "Size of block after malloc of 1000 longs: %u\n", size );

/* Reallocate and show new size: */
if( (buffer = realloc( buffer, size + (1000 * sizeof( long )) ))
== NULL )
exit( 1 );
size = _msize( buffer );
printf( "Size of block after realloc of 1000 more longs: %u\n",
size );

free( buffer );
exit( 0 );
}


你的函数也需要这么计算:

#include<malloc.h>
void CTestDlg::OnButton1()
{
std::string str;
char *p = (char*)malloc(50 * sizeof(char));
int nCount = _msize(p);
}
oyljerry 2009-01-08
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 xuanfeng007 的回复:]
C/C++ codechar*str=(char*)malloc(3);
str[0]=char(1);
str[1]=char(2);
str[2]='\0';stringstr1;
str1=str;intdatasize;
datasize=str1.length();

只有这样子才可以吗?直接string不可以啊?
有没有其他好方法啊,因为我软件里面都用string叠加的,在用char*,估计不太方便啊.
各位高手帮忙啊.比较急,谢谢各位拉!
[/Quote]
string类型也可以直接相加...
cnzdgs 2009-01-08
  • 打赏
  • 举报
回复
不知道你想怎么什么,也可以这样:
string str;
str += '1';
str += '2';
int datasize;
datasize=str1.length();
xuanfeng007 2009-01-08
  • 打赏
  • 举报
回复

char* str=(char*)malloc(3);
str[0]=char(1);
str[1]=char(2);
str[2]='\0';

string str1;
str1=str;

int datasize;
datasize=str1.length();


只有这样子才可以吗?直接string不可以啊?
有没有其他好方法啊,因为我软件里面都用string叠加的,在用char*,估计不太方便啊.
各位高手帮忙啊.比较急,谢谢各位拉!
oyljerry 2009-01-08
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xuanfeng007 的回复:]
C/C++ codestr=(char*)malloc(3);
str[0]=char(1);
str[1]=char(2);
str[2]='\0';intdatasize;
datasize=str.length();

刚才改了下,
为什么这样得到的结果还是24?而不是2或者3?
[/Quote]
你要把分配的数组再赋值给string
cnzdgs 2009-01-08
  • 打赏
  • 举报
回复
char* p = (char*)malloc(3);
漏了个*号。
cnzdgs 2009-01-08
  • 打赏
  • 举报
回复
string不是这样用的,可以这样写:
char p = (char*)malloc(3);
p[0] = '1';
p[1] = '2';
p[2] = '\0';
str = p;
xuanfeng007 2009-01-08
  • 打赏
  • 举报
回复

str=(char*)malloc(3);
str[0]=char(1);
str[1]=char(2);
str[2]='\0';

int datasize;
datasize=str.length();


刚才改了下,
为什么这样得到的结果还是24?而不是2或者3?

19,464

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧