易截截图软件、单文件、免安装、纯绿色、仅160KB

C 面试题之找错题


找错题
  试题1:
void test1()
{
 char string[10];
 char* str1 = "0123456789";
 strcpy( string, str1 );
}
  试题2:
void test2()
{
 char string[10], str1[10];
 int i;
 for(i=0; i<10; i++)
 {
  str1[i] = 'a';
 }
 strcpy( string, str1 );
}
  试题3:
void test3(char* str1)
{
 char string[10];
 if( strlen( str1 ) <= 10 )
 {
  strcpy( string, str1 );
 }
}
  解答:
我对这几道题目的分析如下:
1、  字符串和字符数组char str1[]的异同点:
通过实例说明:string str=”0123456789”; char str1[]={0,1,2,3,4,5,6,7,8,9}
(1) 实际上字符串str也是由一个个的字符构成的,每一个字符都占据一个字节的空间,这一点和字符数组str1是一样的,但是字符串str后面会有一个追加的空字符’\0’来表示字符串的结尾,而字符数组是不用的。图示如下:
str字符串
0
1
2
3
4
5
6
7
8
9
\0
str1字符数组
0
1
2
3
4
5
6
7
8
9
                           
(2) 但是我们在使用strlen()函数,获取字符串或字符数组长度时,都是10,因为在计算字符串长度时,并没有将字符串的最后一个空字符’\0’计算在内,这一点可以参照下面的strlen()函数的具体实现。
2、  关于字符串拷贝函数strcpy():
这个函数需要两个字符指针char*参数,第一个参数表示目的字符串,第二个参数表示源字符串。但是需要注意的就是第二个字符指针必须指向一个字符串,而不能是一个字符数组,因为strcpy()函数具体实现里面有一个for循环,而这个for循环的结束条件就是碰到字符串中的空字符’\0’,如果第二个字符指针指向字符数组的话,将会导致for循环得不到正常结束,从而导致拷贝错误。Strcpy()函数也可参照下面的具体实现代码。
3、  字符串指针char*或称做字符指针的初始化问题(关键要习惯这种初始化格式):
(1) 将char*看作字符串指针,使用字符串初始化:
string str=”12345”;
char* ch=str;//错误,不能将str型赋给char*,因为str是一个string类对象,类型不同不能赋值。
但是,下面的初始化就是正确的:
char


相关文档:

用C写的3D迷宫

          Boss说,要看OpenGL,看了快一个月,总算出了个像样的东西,用C写了个3D迷宫,
虽然只有350行
       代码,不过边学边写,足足写了一周时间,还是小有成就感的,活活活!
         &n ......

50个c/c++源代码网站

C/C++是最主要的编程语言。这里列出了50名优秀网站和网页清单,这些网站提供c/c++源代码。这份清单提供了源代码的链接以及它们的小说明。我已尽力包括最佳的C/C++源代码的网站。这不是一个完整的清单,您有建议可以联系我,我将欢迎您的建议,以进一步加强这方面的清单。 1、http://snippets.dzone.com/tag/c/ --数以千计 ......

c中数据类型的隐式转换

1、隐式转换
    C在以下四种情况下会进行隐式转换:
       1、算术运算式中,低类型能够转换为高类型。
       2、赋值表达式中,右边表达式的值自动隐式转换为左边变量的类型,并赋值给他。
      & ......

C/C++头文件一览

#include <assert.h>    //设定插入点
#include <ctype.h>     //字符处理
#include <errno.h>     //定义错误码
#include <float.h>     //浮点数处理
#include <fstream.h>    //文件输入/输出
#include <iomanip.h>    //参数化输入/输出
#include & ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号