【问题标题】:Assigning a string to a char array in a structure in Turbo C++在 Turbo C++ 中将字符串分配给结构中的 char 数组
【发布时间】:2015-09-25 04:01:44
【问题描述】:

我应该提到我正在使用 Turbo C++(是的旧版本),因为我的学校需要它。

我有这样的结构:

struct move{
 int power;
 int pp;
 char name[10];
 };

当我尝试创建一个新变量时:

move tackle;
tackle.pp = 10;
tackle.power = 20;
tackle.name = "tackle";

我得到一个错误:

Error NONAME00.CPP 11: Lvalue required

但这有效:

move tackle = {20, 10, "tackle"}

它有效。

我做错了什么?

附:第 11 行是 tackle.name = "tackle",如果我之前不清楚,请见谅。

【问题讨论】:

  • 神秘的11号线,在哪里?可以添加行数吗?
  • 我认为只要指出哪一行产生错误就足够了。
  • because it is required by my school 一所学校,其目的是培养不了解当今(甚至 17 年前)C++ 的程序员。

标签: c++ string struct char


【解决方案1】:

你正在使用一个 c 风格的字符串,你应该通过它来初始化它

strcpy(tackle.name, "tackle");

【讨论】:

  • 更好:strncpy(tackle.name, "tackle", 9)
  • @WorldSEnder strncpy(dest, src, 9) 并不好 - 不保证 dest 有一个终止 '\0'tackle.name[0] = 0; strncat(dest, src, sizeof dest) 会。
【解决方案2】:

你不能分配给一个数组,但你可以初始化它。

tackle.name = "tackle";

是一个赋值,而

move tackle = {20, 10, "tackle"};

是一个初始化。

要替换数组的内容,请使用strcpy

strcpy(tackle.name, "tackle");

或者,如果允许,最好使用string

#include <string>

struct move{
 int power;
 int pp;
 string name;
 };

【讨论】:

    【解决方案3】:

    这一行

    tackle.name = "tackle";
    

    尝试将一个数组分配给另一个在 C 或 C++ 中不受支持的操作。

    但是,像 char name[10] = "tackle" 这样的初始化在标准上是可以接受的并且是受支持的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-07
      • 1970-01-01
      • 2011-02-07
      • 2015-04-25
      • 2015-05-23
      • 1970-01-01
      • 2012-05-03
      • 2015-06-25
      相关资源
      最近更新 更多