C++一次指针问题和解决(char指针乱码)
2015-01-02 15:33
197 查看
问题始末
主要是从其他地方读到字符串数据,传入结构体,然后传出。
在C#里当然是没问题的,最近在用C++,这么用导致最后打出来的是乱码。
后来发现,字符串是栈中,A函数执行结束就被销毁了,这时候结构里的指针就变成了野指针,所以就乱码了。
解决:
最后在函数A里加了2行,把字符串拷贝出来得以解决。很多摸不着头脑的BUG,都是这个原因造成的
struct NameGroup { char* Name1; char* Name2; }; NameGroup A() { NameGroup result; //From other dll get values to NameGroup. //result.Name1 = source.Value1 result.Name2 = souce.Value2 return result; } //Question ↓ void B() { NameGroup group = A(); printf("Name1: %s", group.Name1); printf("Name2: %s", group.Name2); //Name1: !@#!@# //Name2: !@#!@# }
主要是从其他地方读到字符串数据,传入结构体,然后传出。
在C#里当然是没问题的,最近在用C++,这么用导致最后打出来的是乱码。
后来发现,字符串是栈中,A函数执行结束就被销毁了,这时候结构里的指针就变成了野指针,所以就乱码了。
解决:
NameGroup A() { NameGroup result; //From Other dll get values to NameGroup. //result.Name1 = source.Value1 result.Name2 = souce.Value2 //result.Name1 = strcpy(result.Name1, source.Value1); //result.Name2 = strcpy(result.Name2, source.Value2); return result; }
最后在函数A里加了2行,把字符串拷贝出来得以解决。很多摸不着头脑的BUG,都是这个原因造成的
相关文章推荐
- c语言打印字符乱码和char *字符循环赋值时“段错误 (核心已转储)”问题解决
- CString 转char *并且解决中文乱码的问题
- CString与char[] 的相互转换方法以及结尾乱码问题的分析解决
- CString与char[] 的相互转换方法以及结尾乱码问题的分析解决
- 解决request.getParament()空指针问题和字符的乱码问题,get和post都没有问题
- CString与char[] 的相互转换方法以及结尾乱码问题的分析解决
- 解决WideCharToMultiByte结尾乱码问题
- MFC有效解决char数组转CString乱码问题
- c语言打印字符乱码和char *字符循环赋值时“段错误 (核心已转储)”问题解决
- Java 通过 JNA 调用 DLL 返回 char * 字符串乱码问题的解决
- .net中中文乱码问题解决
- 解决ASE12.5(英文版)在Win2000下安装显示乱码问题
- Struts中文乱码问题解决
- ASP.NET如何解决页面之间传输中文乱码的问题
- Weblogic Server中如何解决中文显示乱码问题
- JSP中文乱码问题的解决
- 解决mysql--jsp中出现的中文乱码问题
- 如何解决ASP.NET程序安装到繁体系统上的乱码问题
- jsp连接Mysql乱码问题解决
- 解决Zend Development中显示中文乱码的问题