问个C语言上的问题

2019-08-21 12:34发布

调试程序过程中,遇到了一个问题。如下:
#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个字符,但是后面编译器自动加了一个 吗?,那实际上是不是有8个字符长度?
2、由于SerialNum 的定义只有七个字节宽度,导致strcpy(SerialNum, DEFAULT_SE)没有将复制过去,也就是SerialNum结尾没有,导致计算得j>7呢?


另外,看了一下百度百科对C语言中strcpy的介绍:
C语言标准库函数strcpy,把从src地址开始且含有''结束符的字符串复制到以dest开始的地址空间
也就是说strcpy这个函数是把最后的复制过去的,根本原因是我这个地方定义数组内存不够导致的,是这样的吗?


还请各位老师指教。谢谢。





友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
JUSTNIUB
1楼-- · 2019-08-22 12:56
带我足够强大 发表于 2017-4-11 13:04
这个空格是定义进去的,故意加的。

在定义字符串的时候,编译器会默认加一个‘’作为结束符,你猜测是对的。
j>7的原因跟数组越界有一定关系,但不是最主要的,你肯定还做了其他的处理,方便把源码贴上来看看么
szczyb1314
2楼-- · 2019-08-22 18:56
 精彩回答 2  元偷偷看……
带我足够强大
3楼-- · 2019-08-22 22:02
szczyb1314 发表于 2017-4-11 18:04
C语言明确说了strcpy函数使用时要求字符数组1的长度不小于字符串2的长度。
你在定义的时候明显的违背了 ...

谢谢!
带我足够强大
4楼-- · 2019-08-23 01:20
此贴结贴,谢谢各位解答!

一周热门 更多>