因为str22 是个指针常量,没有内存空间
解决方案 »
- MFC 如何制作类似PS中的图层
- 关于CSerialPort的WriteToPort
- 关于自定义分辨率的问题
- winsocket中连续调用send发送数据
- 旷世难题:VC里怎样在VC做的ActiveX控件里使用CToolTipCtrl用来提示文本信息?高手进,在线急等之
- 关于directshow filter的问题
- 在VC6.0技术内幕中介绍字体那一章有一个疑问,请帮忙。
- 我用ATL做工程,注册表里为何没有服务器程序的接口,即CLSID和类型库?
- 我做一个基于对话框的mfc程序,在OnPaint()里贴一张位图于对话框上,但是刷新后发现,我放在对话框上的按钮等控件就常常显示不出来,该怎
- 有趣,关于空结构的问题
- 这个三维坐标用GDI+/GDI可以绘制吗? 怎么绘制呢? 如图
- 关于MFC动态添加菜单?
如果 int fun(char * p_str){............} 在这个函数体中,指针 p_str 是不是也没有分配内存空间,在函数体中使用时,会不会出现内存不能read的情况呢?
char * str22 = new char[30]; //分配30个字符的空间,可以写入29个字符,外加一个结束符0,所以不出错。
char * str22 = “”;//分配一个字符空间,就是结束符0,之后就是别的变量内存或程序,多写几个字符进去就出错了。
GetWindowText(adminer, str22, sizeof(str22)); //sizeof(str22)是指针的长度,而不是指针所指内容的长度,32位时固定是4。str22 = “”时就出错了,str22 = new char[30];就不出错,但最多只能写进去4个字。
正确的方法是 char str22[30]; GetWindowText(adminer, str22, sizeof(str22)-1); 减1的目的是留一个结束符。
char str22[30];
fun( str22 );
调用前先分配了30个字节内存。
也可以 fun(0); 调用,在函数体内判断,如果是0就不操作。
有一个问题,函数体不知道指针内容的长度,建议加一个参数
int fun( char * p_str, int size );
这样就不容易出错了。
谢谢果然透彻!!
减1的目的是去掉结束占用的内存空间,告诉GetWindowText可以写入29个字符,对吗?
....
fun("abc");
....
int fun(char * str){
_strlwr_s(str, sizeof(str)); //这里会导致内存不能为Read, 这是什么原因?
}
谢谢果然透彻!!
减1的目的是去掉结束占用的内存空间,告诉GetWindowText可以写入29个字符,对吗?
....
fun("abc");
....
int fun(char * str){
_strlwr_s(str, sizeof(str)); //这里会导致内存不能为Read, 这是什么原因?
}
同上啊~
谢谢果然透彻!!
减1的目的是去掉结束占用的内存空间,告诉GetWindowText可以写入29个字符,对吗?
....
fun("abc");
....
int fun(char * str){
_strlwr_s(str, sizeof(str)); //这里会导致内存不能为Read, 这是什么原因?
}跟上面一样的道理!int fun(char * str){
_strlwr_s(str, sizeof(str)); //这里会导致内存不能为Read, 这是什么原因?
}
------------------------------------------------------------------------------>
int fun(char * str){
_strlwr_s(str, strlen(str));
}
谢谢果然透彻!!
减1的目的是去掉结束占用的内存空间,告诉GetWindowText可以写入29个字符,对吗?
....
fun("abc");
....
int fun(char * str){
_strlwr_s(str, sizeof(str)); //这里会导致内存不能为Read, 这是什么原因?
}
也是没内存空间啊楼主,函数的参数在任何时候都是个指针。
谢谢果然透彻!!
减1的目的是去掉结束占用的内存空间,告诉GetWindowText可以写入29个字符,对吗?
....
fun("abc");
....
int fun(char * str){
_strlwr_s(str, sizeof(str)); //这里会导致内存不能为Read, 这是什么原因?
}看起来我还是没有说清楚,少说了一句:
_strlwr_s(str, sizeof(str));这一句中的sizeof(str) ,LZ的本意是取字符串的长度3,但实际意义是取字符串地址的长度,类似int的长度,是4,输入的是“abc”,三个字符, _strlwr_s(str, sizeof(str));中传了个4,用了不该用的内存,所以出错了,改成fun("abcdefgh");就不会出错了,但是d以后的字符不会变大写。正确的写法是:
_strlwr_s(str, len(str)); //len(str),取字符串的长度,我凭记忆写的,实际查一下。