char函数

sizeof和sizeof(string)的问题

删除回忆录丶 提交于 2019-12-07 14:31:11
今天看《程序员面试宝典》一书(为了应付将要到来的微软笔试),看到了sizeof(string)这个问题。在Dev C++上测试的结果是4,很不明白。上网搜了一下,得到如下结果: string strArr1[]={"Trend", "Micro", "Soft"}; sizeof(strArr1)=12 转自: http://apps.hi.baidu.com/share/detail/30398570 关于sizeof(string),今天看那本面试宝典的时候看到这个表达式,有点吃惊,书上写着sizeof(string)=4;当时很纳闷,难道分配4个字节大小的内存给string吗?查阅了相关资料得出结论: string的实现在各库中可能有所不同,但是在同一库中相同一点是,无论你的string里放多长的字符串,它的sizeof()都是固定的,字符串所占的空间是从堆中动态分配的,与sizeof()无关。 sizeof(string)=4可能是最典型的实现之一,不过也有sizeof()为12、32字节的库实现。 但是VC6.0测试后sizeof(string)=16.还是跟编译器有关 #include<iostream> using namespace std; void main(void) { string a[] = {"aaaaa","bbbb","ccc"}; int x =

Linux下操作Redis类(基于hiredis接口)

耗尽温柔 提交于 2019-12-07 12:15:06
选择Redis作为NoSql数据库的几点考虑: 数据全部存储至内存中,相对操作数据库(写磁盘)而言读写速度快且支持并发量高 支持持久化,AOF&RDB持久化机制可以避免由一些不可控因素导致的数据丢失问题(如:断电) 二进制安全,可支持存储二进制数据(如:自定义的数据包结构体和图片等信息) 支持数据类型多样,字符串、列表、集合、有序集合等对象可完全满足业务系统的数据存储要求 Redis3.0开始支持分布式集群,不用再使用twemproxy+redis组合来实现集群,安装配置简单,功能强大。 Redis中重要宏定义及结构体介绍: struct redisContext结构体 /* redisConnect()函数返回结构体,代表该Redis的连接句柄 */ typedef struct redisContext { int err; /* Error flags, 0 when there is no error */ char errstr[ 128 ]; /* String representation of error */ int fd; int flags; char *obuf; /* Write buffer */ redisReader *reader; /* Protocol reader */ } redisContext; struct redisReply结构体

C++常用字符串函数使用整理

一曲冷凌霜 提交于 2019-12-07 11:22:26
C++常用字符串函数使用整理 strlen(字符数组) 功能:求字符串长度。 说明:该函数的实参可以是字符数组名,也可以是字符串。 使用样例: char s1[80] = "China"; cout<<strlen(s1)<<'\n';      //输出结果为5 cout<<strlen("大学生")<<'\n';   //输出结果为6  结果说明:一个汉字有两个字节,所以strlen("大学生")的结果为6。 strcpy(字符数组1,字符数组2) 功能:将字符数组2中的字符串复制到字符数组1中 说明: (1)字符数组1的长度必须大于等于字符数组2的长度。 (2)复制时连同字符串后面的'\0'一起复制到字符数组1中。 (3)不能用赋值语句将一个字符串常量或字符数组直接赋给一个字符数组。 (4)字符数组的复制只能用strcpy函数处理。用一个赋值语句只能将一个字符赋给一个字符型变量或字符型数组元素。但可以在定义的时候初始化。 如以下形式: str1 ={''Good"};    //不合法 str1 = str2;      //不合法 char a[5],c1,c2; c1 = 'A'; c2 = 'B';    //合法 c[0] = 'C';       //合法 char g[20] = "aaaa''   //合法 使用样例: `char a[20]="aaaaaa"

C-基础:memcpy、memset、memmove、memcmp、memchr

流过昼夜 提交于 2019-12-07 09:19:27
一,原型 void * memcpy ( void * destination, const void * source, size_t num ); 功能: 将以source作为起始地址的数据复制num个字节到以destination为起始地址的数据中,不支持destination和source重叠的情况。函数返回destination指针。 void * memcpy ( void * destination,constvoid* source,size_t num ) {    char * pdes =( char * )destination;    char * psrc =( char * )source;   assert(destination !=NULL && source !=NULL && num> 0 );    while (num-- )      *pdes++=*psrc++ ;    return destination; } void * memmove ( void * destination, const void * source, size_t num ); 功能: 将以source作为起始地址的数据的num个字节移动到以destination为起始地址的数据中,支持destination和source重叠的情况

C语言-----模拟实现内存操作函数(memset、memcpy、memmove、memcmp、memchr)

落爺英雄遲暮 提交于 2019-12-07 09:19:12
之前实现过一些 字符串操作函数 ,在C标准库中还有一些操作内存的函数 1、 memset 这个函数是用来设置内存内容的,平时我们可以利用它来初始化一段连续空间。 要注意的是这个函数的后两个参数,第二个参数是int,但是具体使用的时候用的是char类型,第三个参数是你要设置内存的大小,以字节为单位。 void * my_memset( void * buf, int value , size_t num) { char * su = ( char *)buf; char ch = value ; for ( int i = num; i > 0 ; --i) { *su = ch; su++; } return buf; } 2、 memcpy 这个函数是用来拷贝内存内容的函数,用来拷贝src所指的内存内容前n个字节到dest所指的内存上,它不像strcpy一样,遇到’\0’就停止拷贝,它会复制完n个字节 注:dest和src所指的内存区域不可重叠 void * my_memcpy( void * dest, void * src, size_t n) { void * res = dest; while (n--) { *( char *)dest = *( char *)src; dest = ( char *)dest + 1 ; src = ( char *)src + 1

C语言中memset-memcpy(memmove memccpy)-strcpy函数源代码

主宰稳场 提交于 2019-12-07 09:18:46
一、概述 1、memset 原型:extern void *memset(void *buffer, char c, int count); 用法:#include <string.h> 功能:把buffer所指内存区域的前count个字节设置成字符c 说明:返回指向buffer的指针 2、 memcpy 原型:extern void *memcpy(void *dest, void *src, unsigned int count); 用法:#inclue <string.h> 功能:由src所指内存区域复制count个字节到dest所指内存区域 说明:src和dest所指内存区域不能重叠,函数返回指向dest的指针 memccpy 原型:extern void *memccpy(void *dest, void *src, unsigned char ch, unsigned int count); 用法:#include <string.h> 功能:由src所指内存区域复制不多于count个字节到dest所指内存区域,如果遇到字符ch则停止复制 说明:返回指向字符ch后的第一个字符的指针,如果src前count个字节中不存在ch则返回NULL。 memmove 原型:extern void *memmove(void *dest, const void *src,

【程序代码】--- memcpy 与 memmove

帅比萌擦擦* 提交于 2019-12-07 09:17:47
memcpy 内存拷贝函数 函数原型: void *memcpy(void *dst, const void *src, size_t n); 功能: 从src所指位置的地址为起始地址,拷贝n个字节到dst所指的内存地址的起始位置中 实现: void *my_memcpy( void *dst, const void *src, size_t n) { assert(dst != NULL && src != NULL ); char *p_dst = ( char *)dst; const char *p_src = ( const char *)src; while (n--) { p_dst++ = p_src++; } } 缺陷: 未考虑内存重叠等问题 memmove 功能: 与memcpy基本一致,但遭遇内存重叠仍可以正确进行 实现: void *my_memmove( char *dst, const char *src, size_t n) { assert(dst != NULL && src != NULL ); char *p_dst = ( char *)dst; const char *p_src = ( const char *)src; if (p_dst <= p_src || p_dst > (psrc + n)) { //不存在内存重叠,正常拷贝

Effective C++ 学习笔记(一)

别等时光非礼了梦想. 提交于 2019-12-07 08:15:30
Effective C++ 学习笔记(一) 当我读完Scott Meyers编写的《Effective C++》以后,我特别想再读一遍,因为这是我看过的关于C++非常好的书籍。这本书介绍了C++编程中需要注意的问题(对于一位合格的C++程序员非常关键的问题),作者以精简的语言进行了描述。第二遍阅读的时候,我打算以笔记的形势记录下来。该书一共分为八个部分: 让自己习惯C++ 构造/析构/赋值运算 资源管理 *设计与声明 实现 继承与面向对象的设计 模板与泛型编程 定制new和delete 杂项讨论 一、让自己习惯C++ 1、视C++为一个语言联邦 今天的C++已经是个多重范型编程语言,一个同时支持过程形式、面向对象形式、函数形式、泛型形式、元编程形式的语言。我们可以把C++视为一个由相关语言组成的联邦而非单一语言。为了理解C++,你必须认识其主要次语言。总共有四个: C 。 C++是以C为基础的,区块、语句、预处理器、内置数据类型、数组、指针等都来自C。 Object-Oriented C++ 。这部分是C with Classes所诉求的:classes、封装、继承、多态、virtual函数(动态绑定)……等等。这一部分是面向对象之古典守则在C++上最直接的实施。 Template C++ 。这是C++的泛编程部分,Template相关考虑和设计已经弥漫整个C++

直通BAT算法面试题总结

早过忘川 提交于 2019-12-07 04:47:24
题1: /** * 题干:对于两棵彼此独立的二叉树A和B,请编写一个高效算法,检查A中是否存在一棵子树与B树的拓扑结构完全相同。 * 给定两棵二叉树的头结点A和B,请返回一个bool值,代表A中是否存在一棵同构于B的子树 * * 解析:其实就是将树序列化为字符串来解决就行。然后在判断一下是否包含。 * */ class Solution{ public boolean solve (TreeNode A, TreeNode B) { StringBuffer stringBufferA = new StringBuffer(); StringBuffer stringBufferB = new StringBuffer(); preOrderTraverse(A,stringBufferA); preOrderTraverse(B,stringBufferB); return stringBufferA.toString().contains(stringBufferB.toString()); } //二叉树前序遍历序列化树 public void preOrderTraverse (TreeNode node,StringBuffer stringBuffer){ if (node == null ) stringBuffer.append( "" );

肥猫学习日记-------------实现Linux ls -l命令

北战南征 提交于 2019-12-07 04:35:59
Linux终端中ls -l是用来查看当前文件夹下所有文件的属性 下面为通过main函数的参数实现ls-l命令 # include <stdio.h> # include <string.h> # include <unistd.h> # include <dirent.h> # include <sys/stat.h> # include <time.h> # include <pwd.h> # include <grp.h> void show_name ( char * name , char * info ) //给文件名字添加颜色 { printf ( "%s" , info ) ; if ( 'd' == info [ 0 ] ) { printf ( "\33[1;34m %s\n\033[0m" , name ) ; } else if ( 'x' == info [ 3 ] ) { printf ( "\33[1;32m %s\n\033[0m" , name ) ; } else { printf ( " %s\n" , name ) ; } } char * file_time ( time_t t , char * str ) //显示时间 { struct tm * it = localtime ( & t ) ; sprintf ( str , "%s