V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
doitcy777
V2EX  ›  问与答

关于 strcat 函数,求解

  •  
  •   doitcy777 · 2020-02-25 22:46:27 +08:00 · 1546 次点击
    这是一个创建于 1493 天前的主题,其中的信息可能已经有所发展或是发生改变。
    小菜鸟遇到一个小问题,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;
    }
    13 条回复    2020-04-26 16:33:27 +08:00
    wevsty
        1
    wevsty  
       2020-02-25 22:48:58 +08:00
    char a[100] ;
    只定义没有初始化的话内部空间的内容是未知的,strcat 是向字符串末尾添加内容,判断字符串末尾是以 0 来判断的。
    这么说明白了么?
    drizztdou
        2
    drizztdou  
       2020-02-26 00:59:14 +08:00 via iPhone   ❤️ 1
    @wevsty 纠正一下是以 \0 判断的。
    Crimilals
        3
    Crimilals  
       2020-02-26 02:33:32 +08:00 via iPhone
    如果是 debug 版本,默认填充应该是 int3,也就是 0×CC
    elfive
        4
    elfive  
       2020-02-26 08:00:51 +08:00 via iPhone
    @drizztdou 字符'\0'就是数值 0……
    WordTian
        5
    WordTian  
       2020-02-26 09:30:51 +08:00 via Android
    @elfive \0 是 0x00,0 是对应 0x30,不一样的
    wevsty
        6
    wevsty  
       2020-02-26 09:58:18 +08:00   ❤️ 1
    @drizztdou @WordTian
    一般表述上,不会把数字 0 认为是一个 ASCII 中的 0 字符,只有在字符串中来表示的时候才会使用\0 这样的写法。

    0 就是 0x00
    ‘0’才是 0x30
    drizztdou
        7
    drizztdou  
       2020-02-26 10:02:27 +08:00 via iPhone
    @elfive 明白了你的想法. ‘\0’的 ascii 码是 0, 但一般来说 使用 ‘\0’ 来指字符串的结尾标志。因为
    当你说 0,有人会觉得是整型 0,有人觉得是字符 ‘0’, 容易造成混淆。
    elfive
        8
    elfive  
       2020-02-26 10:21:09 +08:00 via iPhone
    @WordTian 你说的一个是字符'\0',另一个是字符'0',有单引号的。
    我说的一个是字符'\0',另一个是数值 0,这个数值不带单引号!
    elfive
        9
    elfive  
       2020-02-26 10:26:10 +08:00 via iPhone
    @drizztdou 是的,所以你看我第一条回复里,字符才需要用"'"(单引号)包裹住,表示它不是数值,而数值就不需要。
    lunafreya
        10
    lunafreya  
       2020-02-26 10:27:34 +08:00 via iPhone
    楼上一堆人是有多无聊
    doitcy777
        11
    doitcy777  
    OP
       2020-04-26 11:31:10 +08:00
    感谢各位大神,我已经理解这个问题了。就是 wevsty 说的这个道理。谢谢
    wolegequ
        12
    wolegequ  
       2020-04-26 14:07:18 +08:00 via Android
    楼主扔了一个问题,两个月后回来发现大神们帮忙解决了,于是又问了一个数据库的问题[狗头]
    doitcy777
        13
    doitcy777  
    OP
       2020-04-26 16:33:27 +08:00
    @wolegequ 被你发现了。其实这个小问题我自己也弄明白了。数据库的问题比较棘手。手动狗头。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   963 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 20:35 · PVG 04:35 · LAX 13:35 · JFK 16:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.