【问题标题】:What can I use in C instead of "string" from C++我可以在 C 中使用什么而不是 C++ 中的“字符串”
【发布时间】:2019-08-03 17:40:50
【问题描述】:

我已经开始用 C 语言做一个纸牌游戏,但我找不到任何东西,而不是 string,这显然没有在 C 语言中使用。下面是一些代码,这会成为一个障碍:

struct cards {
    string index;
    string colour;
};

void load_cards(cards deck[MAX_C])
{
    int i = 0;
    for (int j = 0; j < 4; j++) {
        deck[i].index = '2';
        deck[i += 1].index = "3";
        deck[i += 1].index = "4";
        deck[i += 1].index = "5";
        deck[i += 1].index = "6";
        deck[i += 1].index = "7";
        deck[i += 1].index = "8";
        deck[i += 1].index = "9";
        deck[i += 1].index = "10";
        deck[i += 1].index = "W";
        deck[i += 1].index = "D";
        deck[i += 1].index = "K";
        deck[i += 1].index = "A";
    }
    for (int j = 0; j < 13; j++) {
        deck[j].colour = "T";
    }
    for (int j = 13; j < 26; j++) {
        deck[j].colour = "k";
    }
    for (int j = 26; j < 39; j++) {
        deck[j].colour = "K";
    }
    for (int j = 39; j < 52; j++) {
        deck[j].colour = "P";
    }
    for (int j = 52; j < 56; j++) {
        deck[j].colour = "JR";
    }
}

【问题讨论】:

  • std::string 只是char* 的一个包装器(这当然是简化的),它会自动分配和释放。您可以使用char* 并手动进行内存管理。
  • 如果您只使用诸如“JR”之类的字符串文字,您也许可以使用const char *。必须看看你如何使用字符串才能确定。在你走得太远之前,请确保将 C++ 移植到 C 是有意义的。 C 和 C++ 之间存在相当多的意识形态差异,这可能会使直接移植的工作量超过其价值,或者使 C 程序效率低得可怜。
  • Wile @Lorand 是对的,这部分(这当然是简化的)非常重要。您首先必须了解指针和内存分配。这是一个棘手的话题。这里无法解释。 Lorand,添加此警告后,您的评论可以作为答案。 “具体怎么样?”过于宽泛和/或要求提供教程,即离题。
  • 我想知道为什么还没有人建议使用 enum,即使在 C++ 中也是一个更好的选择。
  • 完全不同的是,对于一副纸牌,您不需要string 类型的C++!

标签: c++ c string


【解决方案1】:

string 实际上是 C++ 中的一个类,正如其他人指出的那样,它是 char 数组/指针的包装器(可用于存储 chars 的序列)。

在 C 语言中,您必须手动使用字符数组。您可以通过 2 种方式(主要):

  1. 创建一个静态字符数组(有足够的大小)。
  2. 使用malloc 动态创建字符数组。但是,当不再需要数组时,您还必须手动释放它。

当然,由于您使用的是 C,因此您必须显式/手动处理数组溢出条件、重叠、空终止等。

【讨论】:

  • 可能根本不需要分配存储空间。如果字符串不变,只需将 const 指针指向文字即可。
  • 是的。谢谢你指出。可能有这种情况。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-15
  • 1970-01-01
  • 1970-01-01
  • 2013-04-11
  • 1970-01-01
  • 2021-11-23
  • 2016-06-19
相关资源
最近更新 更多