中级会员
 
- 积分
- 436
- 金钱
- 436
- 注册时间
- 2015-5-28
- 在线时间
- 144 小时
|
1金钱
调试程序过程中,遇到了一个问题。如下:
#define DEFAULT_SE "000000 " //有7个字符
char SerialNum[7]; //定义一个数组
strcpy(SerialNum , DEFAULT_SE); //复制内存中的数据
i =strlen(DEFAULT_SE);
j=strlen(SerialNum);
结果打印出来的:
i=7
j>7(j是一个大于7的数)
我的疑问不确定,大家帮我分析下:
1、宏定义DEFAULT_SE虽然是7个字符,但是后面编译器自动加了一个\0 吗?,那实际上是不是有8个字符长度?
2、由于SerialNum 的定义只有七个字节宽度,导致strcpy(SerialNum, DEFAULT_SE)没有将\0复制过去,也就是SerialNum结尾没有\0,导致计算得j>7呢?
另外,看了一下百度百科对C语言中strcpy的介绍:
C语言标准库函数strcpy,把从src地址开始且含有'\0'结束符的字符串复制到以dest开始的地址空间。
也就是说strcpy这个函数是把最后的\0复制过去的,根本原因是我这个地方定义数组内存不够导致的,是这样的吗?
还请各位老师指教。谢谢。
|
最佳答案
查看完整内容[请看2#楼]
strlen("china")就是等于5而不是6
sizeof("china")是6而不是5
C语言的书上明确写的就是strlen是不包括‘\0’的
|