【问题标题】:how to I copy structure char variable into another char array [duplicate]如何将结构char变量复制到另一个char数组中[重复]
【发布时间】:2022-01-12 19:59:19
【问题描述】:
struct student
{
    char name[50];
    int rollno;
    float marks;
};
int main()
{
    char nam[50];
    int i = 0, n=5;
    struct student s1[n];
    for(i=0;i<n;i++)
    {
       nam[i] = s1[i].name;
     }
}

在给定的代码中,我无法在 nam[i] 中复制 s1[i].name,我尝试了所有复制功能,但每次都给我错误。

【问题讨论】:

  • 使用strcpy()。这应该在每个关于字符串的 C 教程中解释。
  • nam 只是一个字符串,而不是字符串数组。你为什么要把 5 个名字复制进去?
  • nam[i] 只是一个字符。你怎么期望在那里放一个完整的名字?你想得到什么结果?
  • @Bhavin Patil “我尝试了所有的复制功能,但每次都会出错。”至于我,我不知道你所有的复制功能::)
  • strcpy(nam, s[i].nam) 不应该给你一个错误。

标签: c string structure


【解决方案1】:

这...

       nam[i] = s1[i].name;

... 没有意义,因为 name[i]一个 char,而 s1[i].name 是 50 个 chars 的数组。此外,您的循环超过了s1 (5) 的元素数量,这比nams1[i].name 的元素数量要少得多。

假设您确实希望s1 成为struct student 的数组而不是一个结构,您可能希望使用strcpy()。但是,您可能想要或需要使用memcpy()(或逐个元素的复制循环),具体取决于s1 内容的性质及其元素以及对练习的任何人为要求。

strcpy() 变体如下所示:

       strcpy(nam, s1[i].name);
       // do something with nam ...

这取决于源数组是否包含一个以 null 结尾的字符串,在演示程序中不保证会出现这种情况,它从不将任何数据放入 s1 或其元素中。

【讨论】:

    【解决方案2】:

    使用strcpy() 我试过了,它正在工作

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    【解决方案3】:

    这段代码中有很多对你不利的小事情,例如以下...

    int i = 0, n=5;
    struct student s1[n];
    

    ...创建struct student 的可变长度数组,防止初始化程序成为可行路径。但是,如果为了便于说明,您可以使用非 VLA 版本,请尝试以下操作:

    //Use a hard-coded to `5`,  to create an array of 5 struct student, initialized as shown: 
    struct student s1[5] = {{"name1"1, 1.0},("name2",2,2.0},{"name3",3,3.0},{"name4",4,4.0},{"name5",5,5.0}}; 
    

    接下来,您当前的代码:char nam[50]; 创建一个未初始化的 char 数组,足以仅包含 1 个最多 49 个字符的字符串,并以 \0 结尾。如果可以,请像这样创建它。 (为了学习循环复制字符串。)

    char nam[5][50] = {{0}};//created 5 elements of null terminated char array elements, 
    

    然后您可以在循环中执行此操作:

    for(i=0;i<n;i++)
    {
       strcpy(nam[i], s1[i]name);
    }
    

    到现在为止(来自 cmets 和答案)您应该已经知道不能使用 = 运算符复制字符串,例如整数或浮点数。 strcpy()sprintf() 等字符串函数可用于填充字符串。

    【讨论】:

      猜你喜欢
      • 2014-12-13
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 2013-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多