【问题标题】:将值分配给 C 中 struct 数据类型内的数组时出错
【发布时间】:2022-01-22 06:48:26
【问题描述】:
  struct student {
    char name[20];
    int age;
    float mobile;
    char address[20];
};
struct student Amit;
Amit.name[20] = "Sachin"; // I have mentioned the size still warning and unexpected result! why?

输出:

$ gcc try.c try.c:在函数'main'中: try.c:12:17:警告:赋值使指针从没有强制转换的整数 [-Wint-conversion] s1.name[20] = "萨钦"; ^ $ ./a.exe ☺

【问题讨论】:

    标签: arrays c struct initialization string-literals


    【解决方案1】:

    // 我已经提到过尺寸仍然警告和意外结果!为什么?

    您尚未指定数组的大小。数组的大小在其声明中指定。您已经为下标运算符指定了一个索引来访问数组的元素。

    表达式

    Amit.name[20]
    

    具有char 类型,此外存在对数组之外的内存的访问,因为数组的有效索引范围是[0, 19]

    另一方面,字符串文字 "Sachin" 用作赋值表达式的表达式的类型为 char *

    因此编译器发出一条消息。

    数组没有赋值运算符。

    当结构类型的对象被定义为类似时,您需要初始化数组

    struct student Amit = { .name = "Sachin" };
    

    或者在定义对象之后,您可以复制数组中的字符串文字,如

    #include <string.h>
    
    //...
    
    struct student Amit;
    strcpy( Amit.name, "Sachin" );
    

    【讨论】:

      【解决方案2】:

      name[20]name 的索引20 处的char(顺便说一句,超出范围),并且您正在尝试为其分配一个字符串。相反,您可以使用 strcpy 复制那里的值:

      strcpy(Amit.name, "Sachin");
      

      【讨论】:

      • 数组可以这样初始化吗? refername 不是指针。
      • @TruthSeeker 哎呀!接得好。自从我实际上不得不编写 C 语言以来已经太久了……已编辑并修复。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-14
      • 2014-02-13
      • 2021-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多