【问题标题】:My code always displays a smiley face next to my name我的代码总是在我的名字旁边显示一个笑脸
【发布时间】:2021-11-03 19:01:22
【问题描述】:

我做了一个非常简单的程序,它显示字符串名称的值,并在它旁边显示我的名字和笑脸

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char name[5] = "Rafik";

    printf("%s", name);
}

它显示以下错误

Rafik☺

【问题讨论】:

    标签: c visual-studio-code


    【解决方案1】:

    name 数组的大小不正确。它应该是 char name[6],因为 C 字符串文字(在您的情况下为 "Rafik")总是在末尾添加一个额外的字符,即 NULL 字符/终止符 '\0'

    这就是例如scanf 知道字符串结尾在哪里的方式。

    【讨论】:

    • 出于好奇,是否有编译器标志可以捕捉到这个?我只是用大小为 5 和大小为 6 的 -Wall 和 Wextra 运行 Rafik 的代码,但没有收到任何编译时警告。
    • @KevinCrum 没有这样的警告,因为代码是合法的,5 个字符的数组没有任何问题,切换到char name[4] 并带有-Wall 标志你会得到警告: 'char' 数组的初始化字符串太长
    • @KevinCrum 编译器不知道你的意图,也许你会用printf("%.5s", ...) 作为未终止的字符串来调用它?这是硬件受限操作系统中的用例,也是strncat 用零填充缓冲区的原因。
    • @Alaa Mahran 总是在末尾添加一个额外的字符... 如果合适,在这种情况下是不可能的。说得好,还是让编译器自己干活,用char name[] = "Rafik";
    猜你喜欢
    • 1970-01-01
    • 2023-03-28
    • 2020-11-25
    • 2021-01-26
    • 1970-01-01
    • 1970-01-01
    • 2013-01-17
    • 2016-01-27
    • 2019-05-13
    相关资源
    最近更新 更多