代码之家  ›  专栏  ›  技术社区  ›  SkytheCoder

数组类型字符[]不可赋值[重复]

  •  48
  • SkytheCoder  · 技术社区  · 9 年前

    这是我的第一篇帖子。我一直在尝试选择,我希望用户只选择数字,而不是键入数字(更容易),但当我希望数字等于字符串时,它会显示“数组类型” char[30] 不可分配”。即使在后面我是否加了分号。

    #include <stdio.h>
    
    int main() {
      int choice1;
      char word[30];
    
      printf("You have three choice.\n");
      printf("[1] Jump [2] Run [3] Dance\n");
      scanf("%d",&choice1);
      if (choice1 == 1)
      {
        word = "Jump" //Error #1
      }
      else if (choice1 == 2)
      {
        word = "Eat" //Error #2
      }
      else if (choice1 == 3)
      {
        word = "Sleep"; //Error #3
      }
    
      printf("You will now be %sing",word);
    
    }
    
    4 回复  |  直到 9 年前
        1
  •  61
  •   Some programmer dude    9 年前

    你不能 分配 到数组,仅 复制 这是一个很好的例子。

    使用 strcpy 相反,像

    strcpy(word, "Jump");
    
        2
  •  19
  •   Sourav Ghosh    9 年前

    TL;博士 答案:数组 名称 可修改的左值。因此,不能使用赋值运算符( = )在这方面。

    要将内容复制到阵列中,需要使用 strcpy() 从…起 string.h ( char 阵列)或 memcpy() 一般来说


    现在,详细说明 实际原因 错误消息后面,引用 C11 ,第6.5.16章, Assignment operators

    赋值运算符的左操作数应为可修改的左值。

    然后引用同一标准的第6.3.2.1章,

    A. 可修改的左值 是一个没有数组类型的左值,[…]

    因此,数组名称不是 可修改的左值 因此,您不能 分配 什么都可以。这就是错误消息背后的原因。

        3
  •  13
  •   John Bode    9 年前

    这个 = 运算符不能用于复制 目录 从一个阵列到另一个阵列;必须使用库函数,如 strcpy strcat 对于字符串, memcpy 对于非字符串(或单独分配数组元素)。

    这是C如何处理数组的结果 表达 。语言标准将数组表达式定义为 不可修改的左值 ; 它是左值,因为它指的是内存中的对象,但它可能不是赋值的目标。

    数组下标操作 a[i] 定义为 *(a + i) ; 也就是说,给定数组 住址 a 抵消 i 元素,并取消对结果的引用。由于数组表达式 大多数人认为 变量 商店 指向数组第一个元素的指针,但它没有。所有存储的都是数组元素本身。

    相反,每当编译器在语句中看到数组表达式时 转换 类型“N元素数组 T “to”指针指向 T “,并且表达式的值变为数组的第一个元素的地址(除非表达式是 sizeof 或一元 & 运算符,或者是用于初始化声明中的另一个数组的字符串文本)。

    这就是为什么数组表达式像 word 不能成为任务的目标;没有什么可分配的 。没有对象 单词 独立于 word[0] , word[1]

    当你写的时候

    word = "Jump";
    

    表达式的类型 "Jump" 从“5元素数组 char “to”指针指向 烧焦 ”,表达式的值是数组的第一个元素的地址 指针,指针 值到 大堆 对象,其中a)不是指针,b)无论如何都不能赋值。

        4
  •  4
  •   camelccc    5 年前

    使用 strcpy 从…起 <string.h> -

     strcpy(word,"Jump");
    

    其他人也是如此。

    你就是做不到 word ="Jump" 。由于内容是可修改的 阵列 他们自己不是。