char函数

linux上的进程通信学习笔记

大城市里の小女人 提交于 2019-12-07 00:17:42
参考资料 <<精通Linux C编程>> http://man7.org/linux/man-pages/man2/open.2.html https://www.cnblogs.com/52php/p/5840229.html 在 Android中的Handler的Native层研究 文章中研究一下一把Linux中的匿名管道的通信机制,今天这里Linux中的进程间通信补齐。 在Linux中,实现进程通信的方法包括管道(匿名管道和具名管道),消息队列,信号量,共享内存,套接口等。消息队列,信号量,共享内存统称为系统的(POSIX和System V)IPC,用于本地间的进程通信,套接口(socket)则运用于远程进程通信。 各个通信机制定义如下: 匿名管道(Pipe)和具名管道(named pipe):匿名管道用于具有亲缘关系进程间的通信,具名管道克服了管道没有名字的限制,因此除了具有匿名管道的功能外,还允许在无亲缘关系的进程中进行通信。 消息队列(Message):消息队列为消息的链接表,包括POSIX消息队列和System V消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读取队列中的消息。 共享内存:是的多个进程可以访问同一块内存空间,是最快的可以IPC形式。是针对其他的通信机制运行效率较低而设计出来的。往往与其他通信机制,如信号量结合使用

VC6中的MBCS和UNICODE编码

我的未来我决定 提交于 2019-12-07 00:10:40
【转】 今天写的一段代码涉及到MBCS编码和UNICODE编码的相互转换,查了一下MSDN的相关资料,整理如下: 在VC6中,默认使用MBCS编码,即多字节字符,实际就是支持大于0x80的ASCII码。这样,一个中文字可以表示为2个字节,GB2312就是这样表示的。 VC6的默认安装是不带UNICODE库的,要在VC6中写UNICODE程序,必须安装CRT和MFC的Unicode库。 要使你的程序支持Unicode,要在你的项目属性中去掉"_MBCS"宏定义,增加"UNICODE"和"_UNICODE"两个宏定义。(注意,这两个都应该加上,因为CRT和MFC使用UNICODE定义,而STL则使用_UNICODE) 如果你的程序是MFC的,则Unicode版MFC库的入口点是wWinMainCRTStartup。 为了方便开发者,VC6中提供了Tchar.h,里面定义了一些宏用来帮助写两种编码都兼容的代码。 类型 一般文本 数据类型名称 _UNICODE 和 _MBCS 未定义 _MBCS 已定义 _UNICODE 已定义 _TCHAR char char wchar_t _TINT int int wint_t _TSCHAR signed char signed char wchar_t _TUCHAR unsigned char unsigned char wchar_t

CString/string 区别及其转化

空扰寡人 提交于 2019-12-07 00:10:07
CString/string 区别及其转化 利用MFC进行编程时,我 们从对话框中利用GetWindowText得到的字符串是CString类型,CString是属于MFC的类。而一些标准C/C++库函数是不能直接 对CString类型进行操作的,所以我们经常遇到将CString类型转化char*等等其他数据类型的情况。这里总结备忘于此! 首先要明确,标准C中是不 存在string类型的,string是标准C++扩充字符串操作的一个类。但是我们知道标准C中有string.h这个头文件,这里要区分清楚,此 string非彼string。string.h这个头文件中定义了一些我们经常用到的操作字符串的函数,如:strcpy、strcat、strcmp 等等,但是这些函数的操作对象都是char*指向的字符串。 而C++的string类操作对象是string类型字符串,该类重装了一些运算符,添加了一些字符串操作成员函数,使得操作字符串更加方便。有的时候我 们要将string串和char*串配合使用,所以也会涉及到这两个类型的转化问题。 1.CString 和string的转化 string str = " ksarea " ; CString cstr ( str . c_str ()) ; // 或者CString cstr(str.data());初始化时才行 cstr = str .

简单排序算法之插入排序、选择排序和冒泡排序

穿精又带淫゛_ 提交于 2019-12-06 22:27:02
倒也不是临时起意,被问了冒泡排序,我竟然……忘了,好吧,时隔多年重见冒泡,好久不见 甚是想念; 于是乎就写了下代码,顺便重温了两个简单的排序算法:插入排序和选择排序; 作为一个开头,之后有机会就把其它相关排序也总结下,不得不说,真的好生疏/(ㄒoㄒ)/~~ 简单排序算法之插入排序、选择排序和冒泡排序 插入排序: 插入排序是从无序区里依次拿到元素放到有序区里合适的位置; 选择排序; 选择排序是每次将无序区里的最小值放到有序区里的最后一个位置; 冒泡排序; 冒泡排序是每次循环将最大的数“冒泡”到最上边; 有了这几个简单的描述,接下来让我们一个一个来看下; 1.插入排序: 插入排序是从无序区里依次拿到元素放到有序区里合适的位置; 1.1插入排序的理解: 可以将原来的数组看成两个区,分别用两个数组来表示,一个有序区,一个无序区; 有序区起始包含一个元素,即原数组的位置0所对应的元素; 无需区则包含剩余的所有元素; 我们遍历无需区元素,然后与有序区(从末尾位置)逐个进行比较,因为有序区有序,所以当找到满足比较大小的要求时对应的位置,就是元素要插到有序区对应的位置; 为此,我们还需要遍历有序区,好让遍历无序区的元素在有序区中找到合适的位置; 遍历无序区对应算法的外循环; 遍历有序区,比较出无序元素的位置对应内循环; 1.2我们看下具体实现的代码: //插入排序 /*数组 数组长度

c++ 中 char 与 string 之间的相互转换问题

假如想象 提交于 2019-12-06 21:55:04
第一部分: 将 char * 或者 char [] 转换为 string 可以直接赋值,转换。 第二部分: 将 string 转换为 char * 或者 char [] string 是c++标准库里面其中一个,封装了对字符串的操作 把string转换为char* 有 3种方法 : 1. 调用 string 的 data 函数 如: string str="abc"; char *p=str.data(); 2.调用 string 的 c_str 函数 如:string str="gdfd"; char *p=str.c_str(); 3 调用 string 的 copy 函数 比如 string str="hello"; char p[40]; str.copy(p,5,0); //这里5,代表复制几个字符,0代表复制的位置 *(p+5)='/0'; // 要手动加上结束符 cout < <p; 语法: const char * c_str(); c_str()函数返回一个指向正规C字符串的指针, 内容与本string串相同. 这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式。 注意:一定要使用strcpy()函数 等来操作方法c_str()返回的指针 比如:最好不要这样:

c++学习 char char* string三种类型间的转化

时光毁灭记忆、已成空白 提交于 2019-12-06 21:54:52
转自 https://blog.csdn.net/bestcleaner/article/details/81516771 小结: string转化为char *c 使用copy()函数 声明一个 char *c 为其申请与被转化的string一样大小的内存空间 malloc string.copy(c,string.length(),0) string转化为const char *c 使用c_str(),或者data()成员函数 const char *tmp = string.c_str(); const char *tmp = string.data(); char转化为string 直接转化 声明 char *tmp string = tmp 用cout输出是没有问题的,若一定要printf输出。那么可以这样: printf(“%s”,string.c_str()) char[] 转化为string 直接转化 同上 string转化为char[] 计算string大小 循环遍历给char赋值 string 字符串颠倒函数:reserve 来源: CSDN 作者: qq_42910523 链接: https://blog.csdn.net/qq_42910523/article/details/83344811

c++中char *与string之间的相互转换及原理

隐身守侯 提交于 2019-12-06 21:54:16
1. string转const char* string s = "abc" ; const char * c_s = s . c_str (); 2. const char*转string 直接赋值即可 const char * c_s = "abc" ; string s ( c_s ); 3. string转char* string s = "abc" ; char * c ; const int len = s . length (); c = new char [ len + 1 ]; strcpy ( c , s . c_str ()); 4. char*转string char * c = "abc" ; string s ( c ); 5. const char*转char* const char * cpc = "abc" ; char * pc = new char [ 100 ]; //足够长 strcpy ( pc , c) 语法: const char *c_str(); c_str()函数返回一个指向正规C字符串的指针, 内容与本string串相同. 这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式。 注意:一定要使用strcpy()函数 等来操作方法c

c++ string转char*

久未见 提交于 2019-12-06 21:54:01
C++提供了两个函数:c_str()和data() 当处理较短的string时,直接调用这两个函数没有出现问题,调用格式如下: std :: string str = "Hello Word" ; char * p1 = str . c_str ( ) ; char * p2 = str . data ( ) ; 但是,当字符串比较长时,采用这两个函数,转换出来的char* 出现乱码,采用下边这种方式是完全没问题的,故记录在此: char * strc = new char [ strlen ( str . c_str ( ) ) + 1 ] ; strcpy ( strc , str . c_str ( ) ) ; 来源: CSDN 作者: 勤劳的凌菲 链接: https://blog.csdn.net/Suan2014/article/details/95320436

C++: char* 与 string类型转换

谁都会走 提交于 2019-12-06 21:52:43
C++: char* 与 string类型转换 标签:C++ char* string 类型转换 by 小威威 char*属于 <cstring> ,string属于 <string> 。 要实现二者的转换,并不全是简简单单暴力赋值,而是有特殊的方法。下面我将分别介绍char*类型转化为string类型与string类型转化为char*类型。 1.char*转化为string: 法一:直接赋值法(最为简便)。 char * cstr ; string * sstr; sstr = cstr ; 法二:累加法(此处没有法一简便,但是string转化为char*用这种思路更为简便)。 for (int i = 0 ; cstr [i] != '\0' ; i ++) { sstr += cstr[i]; } string类型的字符串可通过累加的方式来添加字符的内容。 2.string 转化为 char*: 法一:循环赋值法(最为简便)。 for (int i = 0 ; i < strlen(cstr); i ++) { sstr[i] = cstr[i]; } 法二:c_str函数法: string sstr; char *cstr1; const char *cstr2; cstr2 = sstr.c_str(); int len1, len2; len1 = strlen

typedef的用法

↘锁芯ラ 提交于 2019-12-06 19:53:57
C语言中typedef用法(ZZ) 1.基本解释 typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。 在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的 新名字(别名) ,另一个是 简化一些比较复杂的类型声明。 至于typedef有什么微妙之处,请你接着看下面对几个问题的具体阐述。 2. typedef & 结构的问题 当用下面的代码定义一个结构时,编译器报了一个错误,为什么呢?莫非C语言不允许在结构中包含指向它自己的指针吗?请你先猜想一下,然后看下文说明: typedef struct tagNode { char *pItem; pNode pNext; } *pNode; 答案与分析: 1、typedef的最简单使用 typedef long byte_4; 给已知数据类型long起个新名字,叫byte_4。 2、 typedef与结构结合使用 typedef struct tagMyStruct { int iNum; long lLength; } MyStruct; 这语句实际上完成两个操作: 1) 定义一个新的结构类型 struct tagMyStruct { int iNum; long lLength; }; 分析