首页 > 解决方案 > C - 分配字符文字与数组文字的行为

问题描述

编码:

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

int main()
{
    union {
        int theInt;
        char theChar;
    } u1;

    u1.theChar = 'A';
    printf("%i\n", u1.theInt);
    printf("%c\n\n", u1.theChar);

    u1.theChar = "A";
    printf("%i\n", u1.theInt);
    printf("%c\n\n", u1.theChar);

}

给出输出:

65
A

45
-

在第一个分配中,分配了字符“A”,在第二个分配中分配了数组“A”。为什么这两个赋值会导致不同的联合值?

标签: carrayschar

解决方案


在您的代码中

 u1.theChar = "A";

是错误的,因为 RHS"A"是一个字符串文字,它归结为指向包含 char'A'和终止 null 的数组的指针。不能将指针分配给 a char,这是违反约束的。

如果代码编译并生成二进制文件,则执行将调用未定义的行为。


推荐阅读