超过 15 个字符的字符字符串出错

pin*_*rog 0 c printf c-strings char undefined-behavior

为什么 gcc 不允许我使用大于 15 的字符维数?

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

int main()
{
    char alphabet[]={'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
    int dim_alph;
    dim_alph=strlen(alphabet);
    printf("%s has %d characters\n", alphabet, dim_alph);
    return 0;
}`
Run Code Online (Sandbox Code Playgroud)

它在字符串和维度上都给了我无效的输出(如果我停在“P”字符而不是“O”字符上)

Sou*_*osh 8

根据当前的初始化,该数组alphabet不是以 null 结尾的,因此不能用作string。尝试将其用作一个(例如:将其传递给需要字符串的函数),将导致越界访问(寻找空终止符)越过分配的内存,访问无效内存会调用未定义的行为

如果必须使用 if 作为字符串,则需要

  • 在花括号括起来的初始值设定项列表中添加一个空终止符,例如 .....'X','Y','Z', '\0'};
  • 使用字符串文字来初始化数组,例如 char alphabet[]="ABCD....XYZ";