strcpy

你必须知道的指针基础-4.sizeof计算数组长度与strcpy的安全性问题

独自空忆成欢 提交于 2020-03-09 07:23:36
一、使用sizeof计算数组长度 1.1 sizeof的基本使用   如果在作用域内,变量以数组形式声明,则可以使用sizeof求数组大小,下面一段代码展示了如何使用sizeof: int nums[] = {11,22,33,44,55,66}; int i; // sizeof(nums) 计算nums数组的总字节数 // sizeof(int) 计算int类型所占用的字节数 int length = sizeof(nums)/sizeof(int); for(i=0;i<length;i++) { printf("%d ",nums[i]); }   其中sizeof(nums)代表计算nums数组的总字节数,而sizeof(int)则代表计算int类型所占用的字节数(32位系统下是4个字节,64位下可能不同,因此这里使用sizeof(int)可以向程序员屏蔽这个差异),运行结果为: 1.2 sizeof只能在编译时计算   假如我们将上面的代码做一个抽象,将数组的遍历及打印封装为一个方法,代码如下: void printEach(int* nums) { // sizeof(nums)在这里是计算指针的字节数 int length = sizeof(nums)/sizeof(int); printf("The length of nums is %d\n",length);

C和C++学习心得(更新中)

柔情痞子 提交于 2020-03-08 22:32:09
1.关于库函数的调用,使用strcmp(),strcpy()等函数,需要加上#include ,还有值得注意的一点是,在调用strcpy时,假设你写了正常的调用语句,如strcpy(str1,str2),编译器仍会报错,则可能需要使用更安全的strcpy_s() 相关详解 2.字符的输入可使用cin.get(),和C中gets()函数的用法差不多,如ar=cin.get(),可用于在多组字符串的输入中吸收无关字符(如输入数据后的回车击键)。而字符串的输入可以使用cin.getline()函数,该函数使用规则:cin.getline()实际上有三个参数,cin.getline(接受字符串到m,接受个数5,结束字符),当第三个参数省略时,系统默认为'\0' 是'/n'吧。 相关详解 示例代码 int repeat,i; char c,ar,str[100]; cin>>repeat;//输入循环次数 for(i=1;i<=repeat;i++){ ar=cin.get();//吸收回车的击键 cin.getline(t,100); cin>>m; strmcpy(s,t,m);//调用一个自定义函数 } 3.字符和字符串的输出,使用cout即可,输出字符串记得要用字符数组的首地址(即函数名)。值得一提的是在C语言中,%g的作用( 详解 ) 还有就是强制转换(type

1326:我删我删,删删删

隐身守侯 提交于 2020-03-08 07:26:51
Title 我删我删,删删删 Problem ID 1326 Time Limit 1 Sec Memory Limit 64 MB Description : 有一个大整数.不超过1000位.假设有N位.我想删掉其中的任意S个数字.使得删除S位后,剩下位组成的数是最小的. Input : 有多组数据数据,每组数据为两行.第一行是一个大整数.第二行是个整数S,其中S小于大整数的位数. 输入以EOF结束。 Output : 对于每组输入数据,请输出其删除后的最小数. Sample Input : 178543 4 100002 1 Sample Output : 13 2 code : 1 #include<stdio.h> 2 #include<string.h> 3 void delet(char yc[], char y) 4 { 5 char temp[1000]; 6 int i, c1; 7 c1 = strlen(yc); 8 9 for (i = 0; i < c1; i++) 10 { 11 if (yc[i]==y) 12 { 13 strcpy(temp, yc); 14 strcpy(&yc[i], &temp[i+1]); 15 return ; 16 } 17 18 } 19 } 20 int main() 21 { 22 char a[1008];/

字符数组 字符串 strcpy strlen

最后都变了- 提交于 2020-03-07 21:04:55
文章目录 1.字符串 2.下面来看看字符数组 3. strlen和strcpy 1.字符串 c++中字符串都是以'\0'结尾 const char * ss = "abc" ; cout << ss << endl ; cout << strlen ( ss ) << endl ; //后续会讲 输出 2.下面来看看字符数组 char ss [ ] = { 'a' , 'b' , 'c' } ; cout << ss << endl ; 输出 这里字符ss在字符‘c’之后若干个字符才是’ \0' ,这时才结束。如果将ss赋值给一个字符指针,并输出字符指针,那么输出仍然是一样的。 const char * s1 = ss ; cout << s1 << endl ; 3. strlen和strcpy //不统计'\0' strlen ( const char * ) ; //按字节拷贝,直到遇见'\0',并且将'\0'拷贝 strcpy ( char * dst , const char * src ) ; //将这个字符串常量拷贝到一个数组中必须给数组空间 const char * s = "abc" ; // strlen(s) = 3,而拷贝到数组中必须要有'\0',因此 “+1” char * p = new char [ strlen ( s ) + 1 ] ;

十年终成程序员面试宝典:数十万IT专业毕业生与程序员的求职宝典

与世无争的帅哥 提交于 2020-03-07 03:51:22
前言 揭开知名IT企业面试、笔试的核心机密,数十万IT专业毕业生与程序员的求职宝典。 本篇涉猎各大IT企业历年面试真题(包括笔试题、口试题、电话面试题、英语面试题以及智力测试等综合面试题),精心收集,精准分析,力求更细、更专、更广、更真!一书在手,求职无忧! 内容简介 本篇取材于各大公司面试真题(笔试、口试、电话面试、英语面试,以及逻辑测试和智商测试),详细分析了应聘程序员(含网络、测试等)职位的常见考点。不仅对传统的C系语言考点做了详尽解释,还根据外企出题最新特点,新增加了对友元、Static、 图形/音频、树、栈、ERP等问题的深入讲解。最后着力讲述了如何进行英语面试和电话面试,并对求职中签约、毁约的注意事项及群体面试进行了解析。面试题除了有详细解析和答案外,对相关知识点还有扩展说明。真正做到了由点成线,举一反三,对读者从求职就业到提升计算机专业知识都有显著帮助。 全篇总共分为五大部分,24章的内容,由于内容过多,所以小编只把部分知识点截图出来粗略的介绍了一下,每节都有更加细化的内容。 第1部分一求职过程 本部分将详述作为一个计算机相关专业的应届毕业生或程序员,在求职面试中 应该注意的一些问题。 古人云:凡事预则立,不预则废。机会都是垂青有准备的人的。为了得到一份满意的工作,大家一定要对整个求职过程有清醒的了解。把能够预见的、必须做的事情早一些做完

实现linux的ls命令,可带参数

若如初见. 提交于 2020-02-29 19:47:56
两个重点: opendir:DIR *opendir(const char *name), 传文件名,返回一个指针,指向目录序列。头文件:#include <sys/types.h> readdir:struct dirent *readdir(DIR *dirp), 把opendir的返回值传过来, 返回值为一个结构体。头文件 #include <dirent.h> #include<stdio.h> #include<stdlib.h> #include<string.h> #include<time.h>//获取时间 #include<sys/stat.h>//返回一个包含文件属性的结构体 #include<unistd.h>//调用系统原语 #include<sys/types.h>//一些数据类型,如pid_t进程ID #include<linux/limits.h>//限制数据类型边界 #include<dirent.h>//打开目录读取目录关闭目录,成功则返回指针 #include<grp.h>//组文件 #include<pwd.h>//口令文件 #include<errno.h>//查看错误代码 #define PARAM_NONE 0 //无参数 #define PARAM_A 1 //-a :显示所有文件 #define PARAM_L 2 //-l

文件的操作

China☆狼群 提交于 2020-02-29 12:06:30
一直以来对文件的操作过程并不是特别熟悉,贴出以下代码来提醒自己,也从实际的例子中感受文件的操作运用 #include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct Students { char Id[10]; char name[20]; double score; }Student; void main() { Student stu;/ /定义学生结构变量 readText("./tmp/computer.txt"); printf("-------------------------------------\n"); strcpy(stu.Id,"B10003"); strcpy(stu.name,"隔壁老王"); stu.score=99; writeText("./tmp/computer.txt",stu); readText("./tmp/computer.txt"); } void writeText(char *filename,Student stu) { FILE *fp; fp=fopen(filename,"a+");// // a+ 打开一个文本文件,允许读写文件。如果文件不存在,则会创建一个新文件。 // 读取会从文件的开头开始,写入则只能是追加模式。 // a

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

struct结构

社会主义新天地 提交于 2020-02-27 12:11:50
什么是结构? 结构,就是一群 不同 或者 相同 类型数据的集合。 类似于 电话薄 ,有姓名,电话号码,家庭住址这些 互有关联 的信息。 一、定义结构 1、结构类型的定义形式 struct 标识符 { 类型 成员1; 类型 成员2; … }; 就以电话薄为例子 struct member { int id ; //编号 char name [ 16 ] ; //姓名 char phone [ 16 ] ; //电话(这里因为电话号码太大超出“long”的范围改为“char”数组) char address [ 100 ] ; //地址 } ; 2、声明变量 定义后声明 struct member { int id; char name [ 16 ] ; char phone [ 16 ] ; char address [ 100 ] ; } ; member a1 , a2 , a3 ; //**注意这里与下文的不同** 定义同时声明 struct member { int id; char name [ 16 ] ; char phone [ 16 ] ; char address [ 100 ] ; } a1 , a2 , a3 ; //**注意这里与上文的不同** 说明:结构变量占有 一片连续 内存空间,具有结构类型的特征; 一个结构类型的成员可以是另一个已定义的结构类型;

第五周

偶尔善良 提交于 2020-02-12 05:48:44
要求 回答 这个作业属于哪个课程 C语言程序设计 这个作业的要求在哪儿 https://edu.cnblogs.com/campus/zswxy/computer-scienceclass3-2018/homework/2827 在这个课程的目标 更好的巩固字符串 这个作业在哪些方面帮助我 这个题目主要是字符串类型的题目 参考文献 C语言程序设计 1.实验代码 PTA #include <stdio.h> #include <string.h> int main() { char str[20][10],a[20],t[10];/*二维数组前面控制的是输入的行数,后面控制的是单词的字母个数*/ int i,j,k,temp,index,n; for(i=0;i<20;i++)/*i:单词个数*/ { scanf("%s",&str[i]); if(str[i][0]=='#') break; else a[i]=strlen(str[i]); } for(k=0;k<i;k++)/*轮数*/ { index=k;/*index用来存放最小值所在的下标*/ for(j=k+1;j<i;j++)/*j:寻找最小值的所在下标,即移动指标*/ { if(a[j]<a[index]) index=j; } temp=a[index]; a[index]=a[k]; a[k]=temp;