关于 strcat 函数,求解

2020-02-25 22:46:27 +08:00
 doitcy777
小菜鸟遇到一个小问题,VS 运行结果如下
求解。


代码如下:
#include <stdio.h>
#include <string.h>
#pragma warning(disable:4996)

int main()
{
//关于 a 的定义,有 2 种:如下,

//第一种方式定义:运行结果正常
char a[100] = {0};
//如果换第二种方式定义,运行结果错误,乱码,无法运行
char a[100] ;


char b[100] ="abcd";
strcat(a,b);
printf("\n%s\n", a);

return 0;
}
1570 次点击
所在节点    问与答
13 条回复
wevsty
2020-02-25 22:48:58 +08:00
char a[100] ;
只定义没有初始化的话内部空间的内容是未知的,strcat 是向字符串末尾添加内容,判断字符串末尾是以 0 来判断的。
这么说明白了么?
drizztdou
2020-02-26 00:59:14 +08:00
@wevsty 纠正一下是以 \0 判断的。
Crimilals
2020-02-26 02:33:32 +08:00
如果是 debug 版本,默认填充应该是 int3,也就是 0×CC
elfive
2020-02-26 08:00:51 +08:00
@drizztdou 字符'\0'就是数值 0……
WordTian
2020-02-26 09:30:51 +08:00
@elfive \0 是 0x00,0 是对应 0x30,不一样的
wevsty
2020-02-26 09:58:18 +08:00
@drizztdou @WordTian
一般表述上,不会把数字 0 认为是一个 ASCII 中的 0 字符,只有在字符串中来表示的时候才会使用\0 这样的写法。

0 就是 0x00
‘0’才是 0x30
drizztdou
2020-02-26 10:02:27 +08:00
@elfive 明白了你的想法. ‘\0’的 ascii 码是 0, 但一般来说 使用 ‘\0’ 来指字符串的结尾标志。因为
当你说 0,有人会觉得是整型 0,有人觉得是字符 ‘0’, 容易造成混淆。
elfive
2020-02-26 10:21:09 +08:00
@WordTian 你说的一个是字符'\0',另一个是字符'0',有单引号的。
我说的一个是字符'\0',另一个是数值 0,这个数值不带单引号!
elfive
2020-02-26 10:26:10 +08:00
@drizztdou 是的,所以你看我第一条回复里,字符才需要用"'"(单引号)包裹住,表示它不是数值,而数值就不需要。
lunafreya
2020-02-26 10:27:34 +08:00
楼上一堆人是有多无聊
doitcy777
2020-04-26 11:31:10 +08:00
感谢各位大神,我已经理解这个问题了。就是 wevsty 说的这个道理。谢谢
wolegequ
2020-04-26 14:07:18 +08:00
楼主扔了一个问题,两个月后回来发现大神们帮忙解决了,于是又问了一个数据库的问题[狗头]
doitcy777
2020-04-26 16:33:27 +08:00
@wolegequ 被你发现了。其实这个小问题我自己也弄明白了。数据库的问题比较棘手。手动狗头。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/647546

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX