问个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条回答
szczyb1314
1楼-- · 2019-08-21 12:55
本帖最后由 szczyb1314 于 2017-4-11 11:50 编辑

strlen("china")就是等于5而不是6
sizeof("china")是6而不是5
C语言的书上明确写的就是strlen是不包括‘’的
szczyb1314
2楼-- · 2019-08-21 18:50
本帖最后由 szczyb1314 于 2017-4-11 11:33 编辑

strcpy要求字符数组必须定义的足够大,以便容纳被复制的字符串,字符数组的长度不应小于字符串2的长度
JUSTNIUB
3楼-- · 2019-08-22 00:26
 精彩回答 2  元偷偷看……
带我足够强大
4楼-- · 2019-08-22 05:31
JUSTNIUB 发表于 2017-4-11 12:39
朋友,你是不是字符串里多了一个空格啊。

这个空格是定义进去的,故意加的。
带我足够强大
5楼-- · 2019-08-22 07:08
szczyb1314 发表于 2017-4-11 11:48
strlen("china")就是等于5而不是6
sizeof("china")是6而不是5
C语言的书上明确写的就是strlen是不包括‘ ...

我知道strlen长度不包括啊,我的问题不在这。。
带我足够强大
6楼-- · 2019-08-22 12:27
szczyb1314 发表于 2017-4-11 11:48
strlen("china")就是等于5而不是6
sizeof("china")是6而不是5
C语言的书上明确写的就是strlen是不包括‘ ...

刚才再次看了下我的问题,可能是我的问题没有问清楚。应该是第一个问题没问清楚吧。
1、宏定义DEFAULT_SE虽然是7个字符,但是后面编译器自动加了一个 吗?,那实际上是不是有8个字符长度?
我知道i=7这个是正确的,后面的那个关于字符串最终有八个字符只是为下一个问题做铺垫。是这个原因导致j>7.

一周热门 更多>