char函数

C语言入门-字符串

梦想与她 提交于 2020-02-07 20:38:17
还是要继续学习,每天给自己打气。 字符数组 char word[] = {'H','e','l','l','o'}; 这不是c语言的字符串,不能用字符串的方式做计算 一、字符串 char word[] = {'H','e','l','l','o','\0'}; 区别就是最后多了一个0 ,这就成为了字符串 以0(整数0)结尾的一串字符 0或'\0'是一样的,但和'0'不同 0标志字符串的结束,但它不是字符串的一部分 计算字符串长度的时候不包含这个0 字符串以数组的形式存在,以数组或者指针的形式访问, 更多的是以指针的形式 string.h里有很多处理字符串的函数 字符串变量 char *str = "hello"; char word[] = "hello"; char line[10] = "hello"; 字符串常量 “hello” “hello"会被编译器变成一个字符数组放在某处,这个数组的长度是6,结尾还有表示结束的0 两个相邻的字符串常量会被自动连接起来 字符串 c语言的字符串是以字符数组的形态存在的 不能用运算符对字符串做运算 通过数组的方式可以遍历字符串 唯一特殊的地方是字符串字面量可以用来初始化字符数组 二、字符串常量 char *s = "hello world"; s是一个指针,初始化为指向一个字符串常量 由于这个常量所在的地方,所有实际上s是const char

2020 HZNU Winter Training Day 10

只谈情不闲聊 提交于 2020-02-07 17:13:01
B CodeForces 1091D 题意:给n!个n的排列,按字典序从小到大连成一条序列,例如3的情况为:[1,2,3, 1,3,2, 2,1,3 ,2,3,1 ,3,1,2 ,3,2,1],问其中长度为n,且和为sum=n*(n+1)/2的序列有多少个? 思路:我们考虑一下next_perumation函数产生字典序递增的全排列的过程: 假设某一个序列长度为n,最长的递减的后缀长度k,那么它的下一个排列是这样产生的:选取序列第n-k个数,与后k个数中比第n - k个数大的最小的数交换,然后将后k个数按从小到大排序。 例如序列1,2,5,4,3的下一个排列为1,3,2,4,5。我们观察发现:这种时候1,2,(5,4,3,1,3,)2,4,5不满足和为sum了,因为在产生下一个排列的过程中,第n-k个位置的数被替换了。 也就是说,假设一个序列存在长度为k的递减后缀,那么这个后缀不能产生一个长度为sum的序列。例如,1,2,(5,4,3,1,3,)2,4,5不行,但是1,(2,5,4,3,1,)3,2,4,5可以。 所以,我们的任务是找出每个长度为k的递减后缀有多少个?应该为C(n,n-k)*(n-k)!=A(n,n-k)=n!/k!个。因为只要选了前面n-k个数,后面长度为k的递减的序列是固定的,所以我们只需要选n-k个数全排列就行了。 我们可以得到最终的答案了:一共有n*n!-

stat函数(stat、fstat、lstat)

試著忘記壹切 提交于 2020-02-07 08:54:20
#include <sys/types.h> #include <sys/stat.h> #include <unistd.h> //需包含头文件 有如下三个函数的函数原型: int stat(const char *path, struct stat *buf); 第一个形参:指出文件(文件路径); 第二个形参:出参数(函数对该参数操作,然后传出)。 int fstat(int fd, struct stat *buf); fstat函数与stat函数的功能一样,只是第一个形参是文件描述符。 int lstat(const char *path, struct stat *buf); lstat函数的形参跟stat函数的形参一样。其功能也跟stat函数功能一样,仅有一点不同:stat函数是穿透(追踪)函数,即对软链接文件进行操作时,操作的是链接到的那一个文件,不是软链接文件本身;而lstat函数是不穿透(不追踪)函数,对软链接文件进行操作时,操作的是软链接文件本身。 以上三个函数:成功返回0,失败返回-1,并且将详细错误信息赋值给errno全局变量。 其它Linux系统函数类似,带l表示不追踪,不带l表示追踪(穿透)。如:ls –l命令查看的文件属性,是不追踪(不穿透)的;rm删除文件时,是不追踪的;Vi和Vim是穿透的;对于穿透的命令,是无法判断文件是不是软链接文件,比如ls

时间

末鹿安然 提交于 2020-02-07 01:24:33
日历时间 Calendar Time UTC,格林威治标准时间,GMT这三个名词基本可以认为是等同的 Epoch是指UTC的1970年1月1日零点,这个时间是UNIX系统问世的大致日期 UNIX系统内部对时间的表示方式均是自Epoch以来的秒数来度量的 日历时间存储在类型为time_t的变量中 获取日历时间: #include <sys/time.h> int gettimeofday(struct timeval *tv, struct timezone *tz); timeval定义如下: struct timeval { time_t tv_sec; /* seconds */ suseconds_t tv_usec; /* microseconds */ }; 其中,tz是一个历史产物,目前已遭废弃,应始终将其置为NULL time函数返回自Epoch以来的秒数: #include <time.h> time_t time(time_t *tloc); 这个函数,除了返回值是秒数,其参数也是秒数、指示指向一个指针缓存区,常设置参数为空、按照以下方式使用: t = time(NULL) 时间转换函数 time_t转换为可打印格式 : #include <time.h> char *ctime(const time_t *timep); 把一个指向time_t的指针作为参数

c语言 局部变量做返回值 问题

倖福魔咒の 提交于 2020-02-07 01:10:19
一般的来说,函数是可以返回局部变量的。 局部变量的作用域只在函数内部,在函数返回后,局部变量的内存已经释放了。因此,如果函数返回的是局部变量的值,不涉及地址,程序不会出错。但是如果返回的是局部变量的地址(指针)的话,程序运行后会出错。因为函数只是把指针复制后返回了,但是指针指向的内容已经被释放了,这样指针指向的内容就是不可预料的内容,调用就会出错。准确的来说, 函数不能通过返回指向栈内存的指针(注意这里指的是栈,返回指向堆内存的指针是可以的)。 下面以函数返回局部变量的指针举几个典型的例子来说明: 1: [cpp] view plain copy #include <stdio.h> char *returnStr() { char *p= "hello world!" ; return p; } int main() { char *str; str=returnStr(); printf( "%s\n" , str); return 0; } 这个没有任何问题,因为"hello world!"是一个字符串常量,存放在 只读数据段 ,把该字符串常量存放的 只读数据段 的首地址赋值给了指针,所以returnStr函数退出时,该该字符串常量所在内存不会被回收,故能够通过指针顺利无误的访问。 2: [html] view plain copy #include < stdio.h >

函数返回局部变量的几种情况

。_饼干妹妹 提交于 2020-02-07 01:04:33
转载 http://blog.csdn.net/haiwil/article/details/6691854/ 本文主要详细讨论了返回返回局部变量的几种情况,值得大家注意。 一般的来说,函数是可以返回局部变量的。 局部变量的作用域只在函数内部,在函数返回后,局部变量的内存已经释放了。因此,如果函数返回的是局部变量的值,不涉及地址,程序不会出错。但是如果返回的是局部变量的地址(指针)的话,程序运行后会出错。因为函数只是把指针复制后返回了,但是指针指向的内容已经被释放了,这样指针指向的内容就是不可预料的内容,调用就会出错。准确的来说,函数不能通过返回指向栈内存的指针(注意这里指的是栈,返回指向堆内存的指针是可以的)。 下面以函数返回局部变量的指针举几个典型的例子来说明: 1: [cpp] view plain copy #include <stdio.h> char *returnStr() { char *p= "hello world!"; return p; } int main() { char *str; str=returnStr(); printf( "%s\n", str); return 0; } 这个没有任何问题,因为"hello world!"是一个字符串常量,存放在只读数据段,把该字符串常量存放的只读数据段的首地址赋值给了指针,所以returnStr函数退出时

汉诺塔问题

落爺英雄遲暮 提交于 2020-02-06 21:18:13
算法思想 对于汉诺塔问题,当只移动一个圆盘时,直接将圆盘从 A 针移动到 C 针。若移动的圆盘为 n(n>1),则分成几步走:把 (n-1) 个圆盘从 A 针移动到 B 针(借助 C 针);A 针上的最后一个圆盘移动到 C 针;B 针上的 (n-1) 个圆盘移动到 C 针(借助 A 针)。每做一遍,移动的圆盘少一个,逐次递减,最后当 n 为 1 时,完成整个移动过程。 因此,解决汉诺塔问题可设计一个递归函数,利用递归实现圆盘的整个移动过程,问题的解决过程是对实际操作的模拟。 其数学规律: 设f(n)为将n个圆盘移动到目标针的步数。则将n个盘从原有针x移动到目标针Y时: (1)先将第1到第n-1个盘从目标针X移动到多余针Z上,即需要f(n-1)步。 (2)将原有针的第n盘移到至目标针Y,即需要1步。 (3)将第1到第n-1个盘从多余针Z移动到目标针Y上,即需要f(n-1)步。 、故f(n)=2f(n-1)+1-> f(n)+1=2[f(n-1)+1]->f(n)+1=[2^(n-1)]* [f(1)+1]。 因为f(1)=1,故f(n)=2^n-1;可得出移动n个盘子需要经历2^n-1步。 #include<stdio.h> #include<ctype.h> #include <stdlib.h> void move(char one,char two); void han(int

Linux kernel 绝对路径之d_path篇

假装没事ソ 提交于 2020-02-06 18:54:19
摘自:https://blog.csdn.net/cenziboy/article/details/8761621 一. d_path函数说明 d_path 是内核提供的根据dentry和vfsmount获取绝对路径函数 此函数有2个版本,以内核版本2.6.25为分界 extern char *d_path(const struct path *, char *, int); extern char * d_path(struct dentry *, struct vfsmount *, char *, int); 结构体path原型如下 struct path { struct vfsmount *mnt; struct dentry *dentry; }; 仅仅是对 vfsmount 和 dentry进行了简单封装而已 二.获取进程路径 char* get_absolute_path(struct task_struct * task) { char * ret_ptr = NULL; char * tpath = NULL ; struct vm_area_struct * vma = NULL; struct path base_path; tpath = (char*)kmalloc(512, 0); if(NULL == tpath || NULL == task) {

共享对象模板

ⅰ亾dé卋堺 提交于 2020-02-06 18:10:13
================================================================================ 标题: 共享对象模板 作者: 叶飞虎 日期: 2018.12.02 在多线程编程中,涉及多线程对象共享,为了保证对象有效,防止出现一个线程正在操作 对象而另外线程正在或已经释放对象的情况。共享对象模板就是针对多线程共享对象而设计, 通过对象引用计数来保证对象有效及对象释放的向后延迟。 共享对象的头文件(KYShareObj.h)如下: // ======================================= // Unit : share object(共享对象) // Version: 4.0.0.0 (build 2018.12.02) // Author : Kyee Ye // Email : kyee_ye(at)126.com // Copyright (C) Kyee workroom // ======================================= #ifndef _KYShareObj_H_ #define _KYShareObj_H_ #include "KYInterlock.h" // KYLib 2.0 开始使用 KYLib 命名空间 namespace KYLib

三 表操作

懵懂的女人 提交于 2020-02-06 07:15:10
一 存储引擎介绍   一、什么是存储引擎   二、MySQL支持的存储引擎   三、使用存储引擎 二 表介绍、创建及查询 三 数据类型   一、类型介绍   二、数值类型   三、日期类型   四、字符串类型   五、枚举类型与集合类型 四 表完整性约束   一、约束简介   二、not null与default   三、unique   四、primary key   五、auto_increment   六、foreign key 五 修改表ALTER TABLE 六 复制表与删除表 一 存储引擎介绍 一、什么是存储引擎 mysql中建立的库===>文件夹 库中建立的表===>文件 现实生活中我们用来存储数据的文件有不同的类型,每种文件类型对应各自不同的处理机制:比如处理文本用txt类型,处理表格用excel,处理图片用png等 数据库中的表也应该有不同的类型,表的类型不同,会对应mysql不同的存取机制,表类型又称为存储引擎。 存储引擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方 法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和 操作此表的类型) 在Oracle 和SQL Server等数据库中只有一种存储引擎,所有数据存储管理机制都是一样的。而MySql 数据库提供了多种存储引擎