char函数

BerkeleyDB库简介

断了今生、忘了曾经 提交于 2020-02-28 06:07:21
BerkeleyDB库简介 BerkeleyDB (简称为BDB)是一种以key-value为结构的嵌入式数据库引擎: 嵌入式:bdb提供了一系列应用程序接口(API),调用这些接口很简单,应用程序和bdb所提供的库一起编译/链接成为可执行程序; NOSQL:bdb不支持SQL语言,它对数据的管理很简单,bdb数据库包含若干条记录,每条记录由关键字和数据(key-value)两部分构成。数据可以是简单的数据类型,也可以是复杂的数据类型,例如C语言的结构体,bdb对数据类型不做任何解释,完全由程序员自行处理,典型的C语言指针的自由风格; DB的设计思想是简单、小巧、可靠、高性能。如果说一些主流数据库系统是大而全的话,那么DB就可称为小而精。DB提供了一系列应用程序接口(API),调用本身很简单,应用程序和DB所提供的库在一起编译成为可执行程序。这种方式从两方面极大提高了DB的效率。第一:DB库和应用程序运行在同一个地址空间,没有客户端程序和数据库服务器之间昂贵的网络通讯开销,也没有本地主机进程之间的通讯;第二:不需要对SQL代码解码,对数据的访问直截了当。 DB对需要管理的数据看法很简单,DB数据库包含若干条记录,每一个记录由关键字和数据(KEY/VALUE)构成。数据可以是简单的数据类型,也可以是复杂的数据类型,例如C语言中结构。DB对数据类型不做任何解释, 完全由程序员自行处理

C语言string字符串函数memset()、memchr()、memcpy()\strcat()、strncat()、strchr()

旧巷老猫 提交于 2020-02-28 05:29:55
1.memchr() 原型:void memchr(const void str, int c, size_t n) 作用:在 str的前n个字节中寻找c 返回值:一个指向匹配字节的指针 否则空指针(第一个匹配的值的指针) 2.strchr() 原型:char strchr(const char*s,int c) 返回值:匹配字节的指针 区别:memchr检测的是一段内存,strchr检测的是一个字符串 如果一段内存中有0x0的话,不能用strchr去查找的,因为遇到0x0会当作字符串的结束符停止。而mem是根据后面的n停止。 # include <stdio.h> # include <string.h> int main ( ) { char * p1 , * p2 ; char ch [ ] = { "Nthing is impossible,Believe yourself!" } ; p1 = ( char * ) memchr ( ch , 'i' , strlen ( ch ) ) ; p2 = strchr ( ch , 'i' ) ; printf ( "Memchr()搜索i:%s\n strhr()搜索i:%s" , p1 , p2 ) ; return 0 ; } 运行结果: Memchr()搜索i:ing is impossible,Believe

Linux下exec函数族详解

筅森魡賤 提交于 2020-02-28 04:50:32
对于exec函数族来说,它的作用通俗来说就是使另一个可执行程序替换当前的进程,当我们在执行一个进程的过程中,通过exec函数使得另一个可执行程序A的数据段、代码段和堆栈段取代当前进程B的数据段、代码段和堆栈段,那么当前的进程就开始执行A中的内容,这一过程中不会创建新的进程,而且PID也没有改变。 一般exec函数族的用途有以下两种: 1. 当进程不需要再往下继续运行时,调用exec函数族中的函数让自己得以延续下去。 2. 如果当一个进程想执行另一个可执行程序时,可以使用fork函数先创建一个子进程,然后通过子进程来调用exec函数从而实 现可执行程序的功能。 通过man命令来看一下exec函数族: 首先exec并不是一个函数名,之所以叫函数族就说明它有很多个不同的函数,但是这些函数的功能是一样的,只不过参数不同使用的方式也略不相同。那么在man命令下看到的exec函数原型是这样的: #include <unistd.h> extern char **environ; int execl(const char *path, const char *arg, .../* (char *) NULL */); int execlp(const char *file, const char *arg, .../* (char *) NULL */); int execle(const

c++ sizeof对象大小整理

时间秒杀一切 提交于 2020-02-28 00:57:43
1. sizeof 是运算符,而不是函数。 2. 当sizeof 的对象是表达式时,求的大小是表达式返回值的类型大小,但并不计算表达式的值,比如: 1 char c = 1; 2 int i = 2; 3 cout << sizeof(c + i) << endl; 4 cout << sizeof(c = c + i) << endl; 前者c + i会隐式类型转化为int类型(类型提升),因此返回4(32位系统), 而后者虽然运算时也是转化为int,但赋值给c时又会转化为char,因此返回的是1。 3. 如果对象是函数,则返回函数返回值类型大小,如: 1 long long foo() 2 { 3 cout << "foo() has been called" << endl; 4 return 0; 5 } 6 7 int main(int argc, char **argv) 8 { 9 cout << sizeof(foo()) << endl; 10 return 0; 11 } 执行后输出8, 不会输出 foo() has been called.说明函数没有真正执行,而只是判断了下返回类型。 4. 当sizeof的对象是数组时,返回 数组总大小 ,而当对象是指针时,返回 指针本身的大小 ,而不是指示内存空间的大小。因为指针本身就是一个无符号整型数, 因此int *p

Tiny-shell

痞子三分冷 提交于 2020-02-27 21:04:03
Tiny-shell:一个模仿bash的极简shell (一) 概述 通过构建一个简单的shell,能够对shell的工作原理进行一些了解。主要有: 重定向 流水线 前台信号处理 进程组 后台进程 作业控制 这篇文章里先实现一个极简的shell,后续再不断对功能进行完善添加。 思路 在 main 函数里,我们需要一个循环来一直进行输出,打印shell的提示符,用于提示命令的输入。同时,我们需要对从标准输入的命令进行处理,也就是字符串的处理。当按下回车时,需要我们 fork 出一个子进程,并调用 execvp 来执行处理过的命令。然后 main 函数 wait 子进程执行完毕继续打印新的一行提示符即可。这就是一个极简的shell。 函数说明 make_argv 首先我们需要写一个处理字符串的函数 int make_argv(const char *s, const char *delimiters, char ***argvp) 。 s 即是我们传入的字符串,比如 ls -l ,我们要做的就是将此字符串处理成一个参数数组,便于传递给 int execvp(const char *file, char *const argv[]) 。函数中主要涉及用 strtok 来进行处理。 execute_cmd 这个函数用于调用 make_argv ,并进行检错,然后调用 execvp 。

sort函数

梦想与她 提交于 2020-02-27 19:39:33
做项目的时候,排序是一种经常要用到的操作。如果每次都自己写个冒泡之类的O(n^2)排序,不但程序容易超时,而且浪费宝贵的时间,还很有可能写错。STL里面有个sort函数,可以直接对数组排序,复杂度为n*log2(n)。 sort是STL中提供的算法,头文件为#include<algorithm>以及using namespace std; 函数原型如下: ? 1 2 3 4 5 template < class RandomAccessIterator> void sort ( RandomAccessIterator first, RandomAccessIterator last ); template < class RandomAccessIterator, class Compare> void sort ( RandomAccessIterator first, RandomAccessIterator last, Compare comp ); 使用第一个版本是对[first,last)进行升序排序,默认操作符为"<",第二个版本使用comp函数进行排序控制,comp包含两个在[first,last)中对应的值,如果使用"<"则为升序排序,如果使用">"则为降序排序,分别对int、float、char以及结构体排序例子如下: ? 1 2 3 4 5 6 7 8 9

C++班级通讯录

我是研究僧i 提交于 2020-02-27 14:16:57
C++实现班级通讯录管理系统 设计流程 本系统基于C++实现班级通讯录管理系统。功能包括增、删、查、改等。通讯录包括的个人信息有姓名、学号、性别、籍贯、政治面貌、手机号、QQ号、宿舍等。主要用到了指针、结构体、遍历链表、文件读取等知识点。 优点 1 . 此系统含有欢迎使用的页面,之后进入功能页面。 2 . 功能设计根据实际情况设计能够最大限度满足现实需求。 3 . 界面简洁易懂,操作简单。 页面效果 完整代码 # include <stdio.h> # include <string.h> # include <stdlib.h> # include <windows.h> typedef struct student //定义结构体 { char name [ 20 ] ; //姓名 char num [ 15 ] ; //学号 char sex [ 10 ] ; //性别 char from [ 20 ] ; //籍贯 char political [ 10 ] ; //政治面貌 char phone [ 15 ] ; //手机号 char QQ [ 15 ] ; //QQ号 char dorm [ 10 ] ; //宿舍 struct student * next ; //结构体指针 } stu ; stu * head ; void print ( ) //主菜单 {

是否有printf转换器以二进制格式打印?

拟墨画扇 提交于 2020-02-27 06:42:01
我可以用printf作为十六进制或八进制数打印。 是否有格式标记打印为二进制或任意基数? 我正在运行gcc。 printf("%d %x %o\n", 10, 10, 10); //prints "10 A 12\n" print("%b\n", 10); // prints "%b\n" #1楼 此代码应满足您最多64位的需求。 我创建了2个函数pBin&pBinFill。 两者都做同样的事情,但是pBinFill用fillChar填充前导空格。 测试功能生成一些测试数据,然后使用该功能将其打印出来。 char* pBinFill(long int x,char *so, char fillChar); // version with fill char* pBin(long int x, char *so); // version without fill #define kDisplayWidth 64 char* pBin(long int x,char *so) { char s[kDisplayWidth+1]; int i=kDisplayWidth; s[i--]=0x00; // terminate string do { // fill in array from right to left s[i--]=(x & 1) ? '1':'0'; //

字符流中第一个不重复的字符

南笙酒味 提交于 2020-02-27 03:30:10
请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。 public class Solution { //Insert one char from stringstream String s = ""; char hash[]=new char[256]; public void Insert(char ch) { s+=ch; hash[ch]++; } //return the first appearence once char in current stringstream public char FirstAppearingOnce() { for(int i = 0;i<s.length();i++){ if(hash[s.charAt(i)] == 1) return s.charAt(i); } return '#'; } } 来源: oschina 链接: https://my.oschina.net/u/4167465/blog/3162234

C++】模板特化的应用---类型萃取

試著忘記壹切 提交于 2020-02-27 00:46:39
在C++中,内置类型的遍历,我们只需要进行浅拷贝就可以,但自定义类型就不一定了。比如之前类与对象中,如果类中对象涉及到资源,我们使用 深拷贝 的方式进行拷贝构造等操作,如果不涉及资源,则使用简单的 浅拷贝 ,在模拟实现string类\vector等中也遇到。这样虽然可以,但代码效率低。 所以,为了将内置类型与自定义类型区分开,就有了 类型萃取,它是类模板特化的应用 。那么我们先来了解类模板特化以及非类型模板参数 非类型模板参数 模板参数分为类型形参与非类型形参 注意: 浮点数,类对象以及字符串是不允许作为非类型模板参数的 非类型模板参数必须在编译期就能确认结果 模板的特化 有时我们使用模板实现一些与类型无关的代码,但对于一些特殊类型的可能会得到一些错误的结果,看下面代码 代码1 template < class T > T MAX ( T left , T right ) { return left > right ? left : right ; } int main ( ) { char * p1 = "world" ; char * p2 = "hello" ; cout << MAX ( p1 , p2 ) << endl ; 比较字符串大小时,这里面比较的是指针类型,因此不管p1、p2是什么字符串,打印的都是p2,所以如果不直接将函数直接给出,用模板的话,就要将模板特化了