范文无忧网面试笔试面试回答

c语言strcpy问题

03月16日 编辑 fanwen51.com

[二级C语言笔试](考试时间120分钟,满分100分) 一、选择题((1)~(40)每题1分,(41)~(50)每题2分,共60分)(1)在计算机中,一个字节所包含二进制位的个数是A)2 B)4 C)8 D)16(2)在多媒体计算机中,CD-ROM属于A)存储媒体 B)传输...+阅读

c语言strcpy问题

先问你一个问题,你确定 这样的语句可以编译通过?至少 我使用的编译器是不能通过这样的语句的。因为 strcpy 你在修改"1234"这个常量区。这是非法的。haha 已经给出一个解释了,我只想再补充一下,sizeof(a)为什么从头到尾就没变过。因为sizeof这个看起来像是个函数其实他不是一个普通的函数,她是一个编译的宏。在编译的时候就已经写进去了,相当于 printf("%d\n",sizeof(a)); 编译完了之后 变成这样的语句printf("%d\n",5);他 已经彻彻底底跟a没有关系了。这个a是引用常量区的一个数组指针,他的定义char a[] 和 const char a[]是没有区别的。由于他是一个常量,因此他的大小 在编译阶段才能得知,因此 编译器看到 sizeof(a)的时候 编译器量了一下它的大小 然后写了个5 上去。就是这样的。

...

C语言 strcpy的问题

首先对俩指针做非零判断,然后保存res—dest(为了最后返回该指针),利用第二个字符串的'\0'字符作为判断条件,while(。。。),循环一次指针+1,直到'\0'结束,最后加上*p='\0',返回开始保存的初始指针 char *strcpy(char *strDest, const char *strScr){ char *address=strDest; assert((strDest != NULL) & (strScr != NULL)); while(*strScr) //是while(*strScr != '\0')的简化形式; { *strDest++ = *strScr++; } *strDest = '\0'; //当strScr字符串长度小于原strDest字符串长度 return address; //时,如果没有改语句,就会出错了。}...

c语言程序有关strcpy问题

问题出在形参类型char **。对bai于char **类型的p,p++只是使p指向du下zhi一个char*位置,而不能指向实参数组dao的下一行。可以这样:#include#includevoid Init_Meun(char p[][20]) //这里改为回答 char p[][20]{ int t; strcpy(*p++,"lookup"); //这里改为p++ strcpy(*p++,"create"); strcpy(*p++,"length"); strcpy(*p++,"middle of L"); strcpy(*p,"quit"); //这里改为p}int main(void){ StaticLinkList space1; int i; char Menu1[5][20]={"abc","efg","hij"}; //这里改为Menu1[5][20] ... Init_Meun(Menu1); return 0;}

挑战C面试题:到底怎样写出一个无懈可击的strcpy函数

首先,我想说你是不是面试的时候被这个题目打击到了???其次,我想说,生活,包括程序,都是有无数的的意外的。a)有些意外是我们可以根据生活经验可以完全预见的(比如生活中的到高压线上荡秋千,比如程序中的数组越界);b)有些意外是可以预见,不是经常发生,但是可能性比较大的(比如生活中的游泳溺水,比如程序中的 new 内存分配失败);c)有些意外是可以预见,但是可能性比较小的,基本上不会发生的,除非出现很严重的情况(比如生活中被雷劈到,比如程序中的 if (p==0) 失败,c = 100 失败,基本上是你的操作系统或者 CPU 挂了。。。。)接着,我想说,生活,包括程序,所谓的避免意外,不是只避开所有意外情况,而是避开大部分的意外情况(比如意外 a 和意外 b ),这样基本上生存的就比较好了,程序跑的也挺流畅了。

你要避开小概率的意外(比如意外 c),你会活得很累的,程序也庞大的无法想象了,根本跑不起来了!最后,编程的人的所谓追求完美,不是自欺欺人的。我们的完美不是静止的,是在不断完善的,没有止境的! #includeusing namespace std;char *strcpy( char *to, const char *from ){ /* 首先,通过指针变量是【无法判断出指针指向的内存的大小】的。 你【不知道】 to 指针和 from 指针指向的空间的大小。 你【只知道】 to 和 form 指针的本身的大小是 4 个字节的(在 x86 机器上) 这样你就遇到【第一个问题】了:如何知道【要拷贝的字符串】结束了(要拷贝的字符串首地址是 from)? 对于 from 指针指向的字符串,你可以说字符串有个结束符 '\0',但这个不是【强制的】。 比如 char s1[4]; char s2[4] = {'a','b','c','d'}; // s2 不是一个标准的 C 字符串! strcpy(s1,s2); 因为 s2 没有结束符 '\0' ,而在 strcpy 函数里面, 【只能通过这个结束符 '\0' 】来判断一个要复制的【字符串的结束】, 比如: while((*from) != '\0' ) // 这个是在任何拷贝函数里面必须出现的!!! { (*to) = (*from); from ++; } 你【永远不知道】from 出现了数组越界!你会一直遍历内存空间,直到遇到一个 '\0'。

你拷贝的永远不是真实的 s2 , 只是以 s2 开头的一块内存而已! 这是【没有办法解决的】【你连异常都无法捕获】! ---------------------------------------------------------------- 其次,即使【要拷贝的字符串】是老老实实的【用 '\0' 结束】的, 但是你不能保证【拷贝到的地方有足够的空间】容纳这个字符串! 比如 char s1[4]; // 拷贝到的地方只有 4 个字节空间 char s2[4] = {'a','b','c','d','\0'}; // 要拷贝的字符串占用 5 个字节空间(包括 '\0') strcpy(s1,s2); 同样的,在 strcpy 里面你也不能通过指针 to 来判断【拷贝到的地方 s1 的真实大小】(这里是4个字节) 你只能不管三七二十一的吧 from 指向的字符串全部拷贝到 to 指向的空间里(包括 '\0')! 你【永远不知道】 to 指向的数组是否已经越界!你会强占 to 后面连着的那块空间, 并在那里写入数据。

也许一些很重要的数据就被覆盖了!!! 这也是【没有办法解决的】【你连异常都无法捕获】! ---------------------------------------------------------------- 我保证,【没有人敢】,他能写出一个永不出错的 strcpy !!! 他只能保证, 【在 from 指向的字符串是正常结束的, 并且 to 指向的空间有足够的大小容纳 from 指向的字符串】, 的前提下,写出一个基本不会出错的 strcpy */ // 我承认我写不出你要的 strcpy。。。。 } int main(int argc, char *argv[]){ return 0;}

延伸阅读:

C语言笔试题目下面是由本站笔试网推荐的C语言笔试题目 一、判断题(对的写T,错的写F并说明原因) 1、有数组定义inta[2][2]={{1},{2,3}};则a[0][1]的值为0。() 2、int(*ptr)(),则ptr是一维数...

c语言面试题1.gets()函数问:请找出下面代码里的问题:#includestdio.hintmain(void){charbuff[10];memset(buff,0,sizeof(buff));gets(buff);printf(\nThebufferenteredis[%s]\n,buff);ret...

C语言题目谢谢12题选A。13题选B。17题选D,22D,23B 第12题,struct结构的大小是计算所含成员的总大小,题中定义1个整型成员占2字节,一个8元素的字符数组,字符变量1字节,则数组大小8字符,一个字符...

c语言用指针解决字符串问题输出一个字符串的子串#include "stdio.h" #include "malloc.h" #include "stdlib.h" void subString(char *p, int start, int len); void substring(char *p,int start, int len) { int i; printf("取出...

关于c语言和c库函数的理解每种c编译器都有自己特定的库函数吗? ——现在没多少啦,因为标准规定的至少要实现的库函数已经足够多了。但编译器支持链接第三方的一些库,所以你可以不断地增加库函数,甚至写自...

谁给我几道求职过程中笔试时容易考到的c语言或者c语言的题目个人主要是学C语言的,给你说说C在面试中常见的问题吧: (首先声明,不同的公司对员工的考核是不同的,所以面试的侧重点肯定也不同,就根据自己的经历,不代表是全部,给你说说吧) 面试,一般...

求一些C语言面试问题这是一些面试常提问的 知识 希望对你有所帮助啊 Thread和Process的间有什么区别?.NET新引入了Application Do概念这样他们 3个的间有什么区别?引入了Application Do会带来些潜...

C语言笔试或面试一般会问到什么问题既然是面试,一定要提前准备,最好准备一套自我介绍,包括对IT行业的看法之类,面试官经常会问这些问题。由于c语言是程序员工作语种的其中1个,所以对于程序员这个工种,还是有一些具体...

c语言试题及答案c语言试题及答案,c语言的考题解答!急!第一题 #include<iostream.h> void fun(int a){ if(a<10) cout<<a<<endl; else{ cout<<a%10; fun(a/10); } } void main(){ fun(12345); }...

推荐阅读
图文推荐
栏目列表