【问题标题】:How I can add a string value to a structure?如何将字符串值添加到结构中?
【发布时间】:2019-08-26 13:21:20
【问题描述】:

我正在编写一个关于卡片的程序,但我无法在结构中添加字符串。这是我的代码:

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

typedef struct
{
    char szin[100];
    char ertek;
} Adat;

int main()
{
    Adat pakli[52];
    int a=0;
    char szimb[13]= {'A','2','3','4','5','6','7','8','9','1','J','Q','K'};
    char szinek[4][100]={"pikk","kor","treff","karo"};
    printf("%s\n",szinek[0]);
    for(int b=0; b<4; b++)
    {
        for(int c=0; c<13; c++)
        {
            Adat d={szinek[b],szimb[c]};
            pakli[a]=d;
            a++;
        }
    }
    printf("%s %c",pakli[0].szin,pakli[0].ertek);
    return 0;
}

所以,请帮助我,我搜索了很多,但我没有得到任何有用的答案。

【问题讨论】:

  • 这段代码会发生什么?你得到什么错误?
  • printf 给我一个随机字符(错了)和一个 A 字母(很好)
  • 由于最长的西装名称占用 6 个字节(5 个字母加上一个空字节),您可以将100 更改为6,而不会明显损失功能,但使用的空间要少得多。您甚至可以考虑在结构中使用指向名称的指针而不是数组(但在 64 位机器上,这不会节省空间 - 由于填充,结构将增加到 16 字节,而不是使用 7 字节)。

标签: c string struct


【解决方案1】:
for(int c=0; c<13; c++)
{
        Adat d={.ertek=szimb[c],};
        strcpy(d.szin,szinek[b]);
        pakli[a]=d;
        a++;
}

for(int c=0; c<13; c++)
{
        pakli[a].ertek=szimb[c];
        strcpy(pakli[a].szin,szinek[b]);
        a++;
}

【讨论】:

    【解决方案2】:

    我假设编译器已经警告过你这个

            Adat d={szinek[b],szimb[c]};
    

    因为编译器会尝试做

    d.szin=szinek[b];
    

    你不能直接做array2 = array1,因为在这种情况下你会操纵数组的地址(char *)而不是它们的值。

    这是初始化你的 char[] 和你的结构的正确方法

    for(int c=0; c<13; c++)
    {
        Adat d;
        strcpy(d.szin,szinek[b]);
        d.ertek=szimb[c];
        pakli[a]=d;
        a++;
    }
    

    或者更好的方式

    for(int c=0; c<13; c++)
        {
            strcpy(pakli[a].szin,szinek[b]);
            pakli[a].ertek=szimb[c];
            a++;
        }
    

    【讨论】:

      猜你喜欢
      • 2020-07-26
      • 2021-11-15
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 2021-12-12
      • 1970-01-01
      相关资源
      最近更新 更多