C++一次指针问题和解决(char指针乱码)
问题始末
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指针乱码)的更多相关文章
- 初始化char指针--赋值和strcpy() 本质区别【转】
原文地址:http://hi.baidu.com/todaygoodhj/item/0500b341bf2832e3bdf45180 使用常量字符串初始化char指针,或者使用strcpy复制,从语法 ...
- char[]数组与char *指针的区别
char[]数组与char *指针的区别 问题描述 虽然很久之前有看过关于char指针和char数组的区别,但是当时没有系统的整理,到现在频繁遇到,在string,char[], char *中迷失了 ...
- char指针
1.在C语言中,没有字符串类型,因此使用char指针表示字符串. 2.那么问题来了,使用char* 表示字符串,到哪里是结尾呢?因此需要一个特殊的字符作为哨兵,类似迭代器中的end(),这个哨兵就是' ...
- char数组与char指针
1.以字符串形式出现的,编译器会在结尾自动添加\0,思考,为什么? 存在的C语言方法,如strlen(s),计算字符串的长度,其中s指针.strlen要计算字符串长度,必须知道哪里是结尾,因此使用\0 ...
- 【C++】智能指针简述(五):解决循环引用的weak_ptr
总结一下前文内容: 1.智能指针通过RAII方法来管理指针:构造对象时,完成资源初始化;析构对象时,对资源进行清理及汕尾. 2.auto_ptr,通过“转移所有权”来防止析构一块内存多次.(如何转移? ...
- C: 当字符数组首指针转化成char *指针,sizeof(*ptr)不为array的size
#include <stdio.h> #include <string.h> int main() { char a[10] = "\0"; char *p ...
- [转] python关于ctypes使用char指针与bytes相互转换的问题
最近研究人脸识别,需要用python调用so动态库,涉及到c/c++中的指针字符串转Python的bytes对象的问题. 按照ctypes的文档,直观方式是先创建对应的类型数组,再将指针取地址一一赋值 ...
- char 指针如何判断字符串需要输出长度
先上代码: #include <stdio.h> #include <string.h> ] = "; int func1(const char *ip) { pri ...
- C++中将对象this转换成unsigned char指针
示例程序 // ---CodeBlob.h--- #ifndef CODEBLOB_H_ #define CODEBLOB_H_ class CodeBlob { private: const cha ...
随机推荐
- 【GISER && Painter】Chapter00:OpenGL原理学习笔记
说明:简单了解一下OpenGL的工作原理,初步认识计算机对于图形渲染的底层设计与实现,第一次接触,也没学过C艹,欢迎各位批评指正. 一 什么是OpenGL? OpenGL是一个开放标准(specif ...
- 将List集合中的map对象转为List<对象>形式--封装类
import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.Li ...
- python的异常机制使用技巧
1.当你开发的接口被其他应用调用时,响应要及时,但是有些要触发的操作很耗时间. 比如下面需要通过被调用触发的函数create_job_1().但是这个函数执行会比较消耗时间 2.于是,我们可以利用异常 ...
- error: <class 'xml.parsers.expat.ExpatError'>, syntax error: line 1, column 0: file: /usr/local/lib/python2.7/xmlrpclib.py line: 557
当linux设备上开启sonar6.2时, supervisorctl status报如下错误: error: <class 'xml.parsers.expat.ExpatError'> ...
- 详解 QT 源码之 Qt 事件机制原理
QT 源码之 Qt 事件机制原理是本文要介绍的内容,在用Qt写Gui程序的时候,在main函数里面最后依据都是app.exec();很多书上对这句的解释是,使 Qt 程序进入消息循环.下面我们就到ex ...
- Qt Creator怎样更改默认构建目录
用过VS的朋友都知道,用VS编译工程时会将生成的可执行文件放在当前工程目录下,使每个工程独立地成为一个整体,管理起来颇为方便:而Qt Creator则不同,编译程序时会创建一个与当前工程目录同级的构建 ...
- [javase学习笔记]-8.1 statickeyword之特点
这一节我们来学习java语言中一个新的keyword就是statickeyword. 当然对于每个keyword,我们都要明白的是它有什么作用,怎么用.我们先来看一个样例: class Person ...
- Android Service+Socket 联网交互
android中,联网操作有http连接和socket连接两大类.由于项目需要,我们采取的是Socket连接.鉴于平时连接频繁,因此把Socket连接放到Service里,需要从服务器端获取数据时,只 ...
- angular中定义全局变量及全局变量的使用
一个例子,定义了两个变量,并且把变量显示出来: <!DOCTYPE html> <html ng-app="myApp"> <head> < ...
- nDCG学习笔记
参考:http://en.wikipedia.org/wiki/Discounted_cumulative_gain Normalized Discounted Cumulative Gain:一种对 ...