char函数

C:字符数组和字符指针

依然范特西╮ 提交于 2019-12-21 14:20:33
   C语言中没有string类型,字符串都是通过char字符数组来存储的   char * str = "Hello" (字符指针)   char str[6] = "Hello" (字符数组)   char line[10] = "Hello"  编译器编译后数组长度为6,自动生成\0都是{'H','e','l','l','o','\0'}   当用char *str 初始化字符串数组之后,该数组为只读数组(实际上是const常量,不可修改),在代码段中,不可以对其修改,如s[0] = ‘s’,否者报错      char * str = "Hello" 等价于char * str;  str = "Hello"   当用char str[6]初始化字符串数组之后,该数组是可以修改的      只能使用 char str[6] = "Hello",不可以char str[6];  str[6] = "Hello"     如果要构造字符串,用数组      如果要处理字符串,用指针    char *表示的是字符串或者是单个字符   要写入字符串数组,要开辟新的空间(以后补充)          对于逃逸字符,可以使用//来输出 字符串的输入和输出   char string[8];   scanf("%s",&string);   printf("%s",string);  

C - 基础 - 字符串函数

℡╲_俬逩灬. 提交于 2019-12-21 13:16:08
目录 字符串输入 字符串输出 常用字符串函数 字符串输入 gets函数,构造为 char *gets(char * s) , 不足是不检查预留存储区是否能够容纳你实际输入数据,多出则溢出。 #include <stdio.h> #define MAX 80 int main() { char name[MAX]; char *ptr; printf("What's your name?\n"); ptr = gets(name); printf("Hello , %s!\n" , name); return 0; } fget函数,避免溢出问题,第二个参数指定获取的长度,第三个参数为获取来源,可以是文件或标准输入。 #include <stdio.h> #define MAX 10 int main() { char name[MAX]; char *ptr; printf("What's your name?\n"); ptr = fgets(name, MAX, stdin); printf("Hello , %s! , my firend %s!\n", name, ptr); return 0; } scanf函数,优点是可以格式化输入,缺点是前一个未能读完的参数会成为第二个变量值。 #include <stdio.h> #define MAX 10 int main()

Sqlite c/c++ api 学习

天大地大妈咪最大 提交于 2019-12-21 13:05:14
Sqlite是我最喜欢使用的文件数据库,它小巧、方便、速度快、支持大部分标准sql语句、开源、免费 .. .. .. 优点太多了。自从认识了她之后,我就将Access打入了冷宫,发誓以后再也不用Access了。我们可以到Sqlite的 官方网站 下 载Sqlite的源代码,编译后的结果只有200多K,太小巧,太卡哇依了。如果嫌自己手动编译麻烦,也可以直接从官网下载二进制的可执行文件或者动态链 接库。可执行文件可以用命令行的方式来创建、操作数据库;动态链接库则可以用程序来操作Sqlite数据库。今天我就来介绍一下如何使用c/c++来操作 Sqlite吧~~~ 准备工作 我这里使用的sqlite版本是3.x,所以首先从官网下载动态链接库 sqlite3.dll ;然后再下载api头文件 sqlite3.h 。在Code::Block中新建一个C++的控制台项目,添加对sqlite3.dll的引用,同时将sqlite3.h添加到项目中。我这里还使用了一个工具: SqliteSpy ,用于对数据库进行可视化的操作。 开始使用API 下面就开始使用API吧~。Sqlite的所有api,可以在 这里 查询到。 sqlite3_open sqlite3_exec sqlite3_close 看到这些函数,我相信你大概能猜出这些函数的功能。sqlite3_open用于打开一个数据库

c语言文件

一世执手 提交于 2019-12-21 11:08:32
c语言文件 任务1 你现在拥有一个数组,数组中储存着总共10个人的姓名字符串 你需要为每个人创建一个txt文件,以他们的名字命名。 生成效果如下 代码如下 #include<stdio.h> int main() { FILE* fp; char name[10][20] = { "宋林涛","黄力强","陈汉煜","张旭","李龙生","蔡泓顺","郝冰冰","茅志雄","雷雯雯","朱仕岳" }; int i; for (i = 0;i < 10;i++) { sprintf(name[i], "%s.txt", name[i]); fp = fopen(name[i], "w"); if (fp == NULL) { break; } fclose(fp); } return 0; } 任务2 在任务一的基础上,这次不仅仅要创建txt文件,还需要往文件中写入 每个人的学号,性别,班级,线代成绩 生成效果如下 代码如下 #include<stdio.h> struct stu { char id[100]; char name[30]; char grade[10]; char sex[10]; char Class[10]; }s1[100]; int main() { FILE* fp; char name[10][20] = { "宋林涛","黄力强","陈汉煜","张旭

编写DLL

家住魔仙堡 提交于 2019-12-21 09:03:47
想想还是把这个记录下吧,虽然不难,但由于平时写得不多,老是搞忘了。 1、我们来编写一个简单的DLL程序。 首先,我们来看下入口函数DllMain()。DllMain()有3个参数: (1)hModule:DLL模块的句柄。 (2)ul_reason_for_call:DllMain函数被调用的原因。其取值有4种,分别是DLL_PROCESS_ATTACH(当DLL被某进程加载时DllMain被调用)、DLL_PROCESS_DETACH(当DLL被某进程卸载时DllMain被调用)、DLL_THREAD_ATTACH(进程中有线程被创建时DllMain被调用)、DLL_THREAD_DETACH(进程中有线程结束时DllMain被调用)。 (3)lpReserved:保留项。 函数前面的APIENTRY是一个宏,定义如下: #define APIENTRY WINAPI WINAPI也是一个宏,表示一种函数调用约定。 我们需要对DllMain()进行一下填充,加个switch。后面详见例子。我们还需要为之添加一个简单的导出函数。该函数定义如下: extern "C" __declspec(dllexport) VOID MsgBox(char *szMsg); extern "C"表示该函数以C方式导出。 其实现如下: VOID MsgBox(char *szMsg){ char

Web服务器——HTTP状态机解析

99封情书 提交于 2019-12-21 06:06:07
Web服务器——HTTP状态机解析 程序说明 主要练习HTTP解析的状态机的使用。接收一个客户端请求,判断是否是一个正确的GET请求,并解析出相应字段。   主要练习HTTP解析的状态机的使用。接收一个客户端请求,判断是否是一个正确的GET请求,并解析出相应字段。   有两个状态机,主状态机和从状态机,分别解析出相关字段。   注意一个地方,每次recv时,并没有把buffer给覆盖,而是继续加到buffer现有字段的后面,类似于append方式读取。   当读取到构成一个完整的行(携带\r\n)时,然后开始进行解析,分两步:     第一步,解析GET、 index.html、HTTP/1.1等信息     第二步,解析Host信息   其实就是按照请求消息的内容顺序解析储这4个字段。 运行方法 编译 g++ main.cpp -o main 直接运行也可以,默认ip为127.0.0.1,默认端口为8888 运行 curl 127.0.0.1:7777/index.html 运行结果: 客户端发起请求: # 方式1:命令行curl方式 yongpu@ubuntu:~$ curl 127.0.0.1:7777/index.html I get a correct result # 方式2:浏览器 输入: 127.0.0.1:7777/index.html 浏览器页面无法显示结果

网络编程1 网络开发基础(Socket、TCP、UDP)

狂风中的少年 提交于 2019-12-21 03:40:02
OSI七层网络模型 1.网络的七层结构:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。 2.在网络通信的发送端,其通信数据每到一个通信层,都会被该层协议在数据中添加一个包头数据。而在接收方恰恰相反,数据通过每一层时都会被该层协议剥去相应的包头数据。 TCP/IP 1.IP地址 IP地址是指互联网协议地址(Internet Protocol Address,又译为网际协议地址)。IP地址时IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一个主机分配一个逻辑地址,以此来屏蔽物理地址的差异。 2.Port 端口号:为了区分不同的网络程序,计算机会为每一个· 网络程序分配一个独一无二的端口号,端口是一个虚拟的、逻辑上的概念。 for example:Web服务的端口号是80,FTP服务的端口号是21,SMTP服务的端口号是25。 3.TCP/IP通信协议的网络层次结构 应用层 运输层 网际层IP 网络接口层 4.TCP/IP协议的特性 1.封包交换网络服务 2.可靠流传输服务 3.独立网络技术 4.通用互连 5.端到端应答式 6.标准应用协议 5.TCP/IP中的各种协议 1.IP协议 IP协议是网络层协议,主要职责是把数据从源地址传送到目的地址,并提供两个基本功能--寻址和分段 IP协议提供的是不可靠无连接的服务 2.TCP协议

atoi 和 itoa 还有sprintf的使用

蹲街弑〆低调 提交于 2019-12-21 01:57:56
目的是为了让字符数组中16进制数,以字符串的实现体现: int atoi(const char *nptr); int atoi(const char *nptr); atoi 把字符数据转换为int类型 char *itoa (int value, char *str, int base ); 返回值:返回指向str的指针,无错误返回。 [2] int value 被转换的整数,char *string 转换后储存的字符数组,int radix 转换进制数,如2,8,10,16 进制等,大小应在2-36之间 itoa 如何要在liunx中使用要添加源码程序,库里现在没有这个函数 int sprintf(char *string, char *format [,argument,…]); string-- 这是指向一个字符数组的指针,该数组存储了 C 字符串。 format-- 这是字符串,包含了要被写入到字符串 str 的文本。它可以包含嵌入的 format 标签,format 标签可被随后的附加参数中指定的值替换,并按需求进行格式化。format 标签属性是%[flags][width][.precision][length]specifier [argument]…:根据不同的 format 字符串,函数可能需要一系列的附加参数,每个参数包含了一个要被插入的值,替换了

Linux 创建子进程执行任务

这一生的挚爱 提交于 2019-12-21 00:17:58
Linux 操作系统紧紧依赖进程创建来满足用户的需求。例如,只要用户输入一条命令,shell 进程就创建一个新进程,新进程运行 shell 的另一个拷贝并执行用户输入的命令。Linux 系统中通过 fork/vfork 系统调用来创建新进程。本文将介绍如何使用 fork/vfork 系统调用来创建新进程并使用 exec 族函数在新进程中执行任务。 fork 系统调用 要创建一个进程,最基本的系统调用是 fork: # include <unistd.h> pid_t fork(void); pid_t vfork(void); 调用 fork 时,系统将创建一个与当前进程相同的新进程。通常将原有的进程称为父进程,把新创建的进程称为子进程。子进程是父进程的一个拷贝,子进程获得同父进程相同的数据,但是同父进程使用不同的数据段和堆栈段。子进程从父进程继承大多数的属性,但是也修改一些属性,下表对比了父子进程间的属性差异: 继承属性 差异 uid,gid,euid,egid 进程 ID 进程组 ID 父进程 ID SESSION ID 子进程运行时间记录 所打开文件及文件的偏移量 父进程对文件的锁定 控制终端 设置用户 ID 和 设置组 ID 标记位 根目录与当前目录 文件默认创建的权限掩码 可访问的内存区段 环境变量及其它资源分配 下面是一个常见的演示 fork 工作原理的 demo

10进程控制1

生来就可爱ヽ(ⅴ<●) 提交于 2019-12-21 00:16:47
概念 程序:一个保存在磁盘中的文件,规定运行时要执行的代码和要完成的动作。 进程:把程序加载为内存中一段数据,程序的执行过程,具有产生,发展和消亡的过程 线程:unix的最小调度单位,一个进程可以有多个线程,共享进程ID,共享进程资源。 父子进程 进程采用树形结构管理,一个进程启动另一个进程时,被启动的进程就是子进程,原进程就是父进程。 fork():复制了父进程的数据,堆栈段,进程环境。另外,各个子进程拥有自己的进程环境 init进程: 所有进程的父进程 进程状态 运行态: 分配到了CPU 就绪态: 等待CPU 睡眠态: 不能获取CPU,直到某事发生,进入就绪态 进程属性函数: 进程标识符 pid:进程的唯一ID号 pid_t getpid() 获取进程id pid_t getppid() 获取父进程id pid_t getpgrp() 获取进程组id 进程用户标识号 uid_t getuid() 返回进程的用户ID (uid: 用户ID) uid_t geteuid() 返回进程的有效用户ID (该进程有哪个权限) gid_t getgid() 返回进程的组ID gid_t getegid() 返回进程的有效组ID chmod u+s uid_demo  运行改程序的人,程序运行过程中,暂时拥有 文件属主 的用户权限 进程调用 创建新进程步骤 1、fork() 创建新进程