1.引言
本文的写作目的并不在于提供c/c++程序员求职面试指导,而旨在从技术上分析面试题的内涵。文中的大多数面试题来自各大论坛,部分试题解答也参考了网友的意见。
许多面试题看似简单,却需要深厚的基本功才能给出完美的解答。企业要求面试者写一个最简单的strcpy函数都可看出面试者在技术上究竟达到了怎样的程度,我们能真正写好一个strcpy函数吗?我们都觉得自己能,可是我们写出的strcpy很可能只能拿到10分中的2分。读者可从本文看到strcpy函数从2分到10分解答的例子,看看自己属于什么样的层次。此外,还有一些面试题考查面试者敏捷的思维能力。
分析这些面试题,本身包含很强的趣味性;而作为一名研发人员,通过对这些面试题的深入剖析则可进一步增强自身的内功。
2.找错题
试题1:
| void test1() { char string[10]; char* str1 = "0123456789"; strcpy( string, str1 ); } |
| void test2() { char string[10], str1[10]; int i; for(i=0; i<10; i++) { str1[i] = 'a'; } strcpy( string, str1 ); } |
| void test3(char* str1) { char string[10]; if( strlen( str1 ) <= 10 ) { strcpy( string, str1 ); } } |
| void strcpy( char *strdest, char *strsrc ) { while( (*strdest++ = * strsrc++) != ‘\0’ ); } |
| void strcpy( char *strdest, const char *strsrc ) //将源字符串加const,表明其为输入参数,加2分 { while( (*strdest++ = * strsrc++) != ‘\0’ ); } |
| void strcpy(char *strdest, const char *strsrc) { //对源地址和目的地址加非0断言,加3分 assert( (strdest != null) && (strsrc != null) ); while( (*strdest++ = * strsrc++) != ‘\0’ ); } |
| //为了实现链式操作,将目的地址返回,加3分! char * strcpy( char *strdest, const char *strsrc ) { assert( (strdest != null) && (strsrc != null) ); char *address = strdest; while( (*strdest++ = * strsrc++) != ‘\0’ ); return address; } |
| { assert( strt != null ); //断言字符串地址非0 int len; while( (*str++) != '\0' ) { len++; } return len; } |
| void getmemory( char *p ) { p = (char *) malloc( 100 ); } void test( void ) { char *str = null; getmemory( str ); strcpy( str, "hello world" ); printf( str ); } |
| char *getmemory( void ) { char p[] = "hello world"; return p; } void test( void ) { char *str = null; str = getmemory(); printf( str ); } |
| void getmemory( char **p, int num ) { *p = (char *) malloc( num ); } void test( void ) { char *str = null; getmemory( &str, 100 ); strcpy( str, "hello" ); printf( str ); } |
| void test( void ) { char *str = (char *) malloc( 100 ); strcpy( str, "hello" ); free( str ); ... //省略的其它语句 } |
| char *str = null; getmemory( str ); |
| char p[] = "hello world"; return p; |
| *p = (char *) malloc( num ); |
| if ( *p == null ) { ...//进行申请内存失败处理 } |
| char *str = (char *) malloc(100); |
| str = null; |
| swap( int* p1,int* p2 ) { int *p; *p = *p1; *p1 = *p2; *p2 = *p; } |
| swap( int* p1,int* p2 ) { int p; p = *p1; *p1 = *p2; *p2 = p; } |
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器