char *img_name与char img_name[]的区别
2017-03-21 19:38
169 查看
在MFC的按钮消息响应中写如下代码:
(1)char img_name[100]="..\\dataset\\holidays\\images\\";
(2)const char *src=result[k];
(3)strcat(img_name,src);
(4)IplImage *img=cvLoadImage(img_name);
点击按钮,程序正确运行。
而如果我将上面(1)作如下修改:
char *img_name="..\\dataset\\holidays\\images\\";
点击按钮,程序崩了。经查资料在stackoverflow上找到答案的,http://stackoverflow.com/questions/3862842/difference-between-char-str-string-and-char-str-string。
原因就是:
一、char *img_name="..\\dataset\\holidays\\images\\" 中的img_name指向的字符串是不能被修改的,img_name是一个4字节或者8字节的内存,其内容是一个地址,sizeof(img_name)=4(Win32),sizeof(img_name)=8(x64);
二、char img_name[]是一个连续内存中的第一个地址,其内容是一个字符,如char str[]="hello",str是一个大小为6的char 型数组,由h,e,l,l,o和\0对其进行初始化。
解决方案:
引入一个copy的指针temp_img_name,修改代码如下:
(1)char img_name[100]="..\\dataset\\holidays\\images\\";
(2)char *temp_img_name=NULL;
(3)temp_img_name=img_name;
(4)const char *src=result[k];
(5)strcat(temp_img_name,src);
(6)IplImage *img=cvLoadImage(temp_img_name);
(1)char img_name[100]="..\\dataset\\holidays\\images\\";
(2)const char *src=result[k];
(3)strcat(img_name,src);
(4)IplImage *img=cvLoadImage(img_name);
点击按钮,程序正确运行。
而如果我将上面(1)作如下修改:
char *img_name="..\\dataset\\holidays\\images\\";
点击按钮,程序崩了。经查资料在stackoverflow上找到答案的,http://stackoverflow.com/questions/3862842/difference-between-char-str-string-and-char-str-string。
原因就是:
一、char *img_name="..\\dataset\\holidays\\images\\" 中的img_name指向的字符串是不能被修改的,img_name是一个4字节或者8字节的内存,其内容是一个地址,sizeof(img_name)=4(Win32),sizeof(img_name)=8(x64);
二、char img_name[]是一个连续内存中的第一个地址,其内容是一个字符,如char str[]="hello",str是一个大小为6的char 型数组,由h,e,l,l,o和\0对其进行初始化。
解决方案:
引入一个copy的指针temp_img_name,修改代码如下:
(1)char img_name[100]="..\\dataset\\holidays\\images\\";
(2)char *temp_img_name=NULL;
(3)temp_img_name=img_name;
(4)const char *src=result[k];
(5)strcat(temp_img_name,src);
(6)IplImage *img=cvLoadImage(temp_img_name);
相关文章推荐
- char *name 与 char name[]的区别
- char *name 与 char name[]的区别
- VC中char *name 与 char name[]的区别
- 4000 char *name和char name[]的区别
- 转VC中char *name 与 char name[]的区别(基础知识)
- 学习C语言中的char *name 与 char name[]的区别
- 转VC中char *name 与 char name[]的区别(基础知识)
- VC中char *name 与 char name[]的区别(基础知识) 2010-7-16 11:48
- char *pname和char name[]的区别
- char *name 与 char name[]的区别(基础知识)
- nchar,char,varchar与nvarchar区别
- 关于const char *p 、char const*p 、char *const p 的区别
- const char*, char const*, char*const的区别
- xml读取.sax解析方式 使用于Android 和java中 ,代码是java的, 在Android中只需要 区别监听类中的参数(localName,qName),相反的,java中使用qname 为节点的名称;
- char *s 和 char s[] 的区别小结
- char *p="abc" 与 char p[]="abc" 的区别
- char格式化linux和windows区别
- C语言中char * 和 char []的区别
- DB_NAME、DB_UNIQUE_NAME、SERVICE_NAME和INSTANCE_NAME等的区别
- MySQL字符集 GBK、GB2312、UTF8区别 解决 MYSQL中文乱码问题以及error 1406:data too long for column 'name' at row 1