【问题标题】:C++ Update StructC++ 更新结构
【发布时间】:2017-05-09 16:13:58
【问题描述】:

我有这个:

typedef struct {
    char nome[50];
    char morada[100];
    char codpostal[8];
    char localidade[30];
    int telefone;
    int nContribuinte;
} CLIENTE;
CLIENTE c;

如何像c.nome = "something"; 一样更新c.nome?无法弄清楚为什么这不起作用...c 已被保存在二进制文件中的已知信息填充

我应该这样做:if (Conf == 1) { scanf("%s", c.nome); } else { c = Clt.nome; }

【问题讨论】:

  • C++ 中的structs 不需要typedef,只需命名即可。
  • 忠告---停止写C代码。
  • 在 C++ 数组中是不可赋值的,你可以使用一个函数来用你的字符串文字填充它,strcpy 可以工作。只要确保你有足够的空间放置一个 nul 终结器,否则会发生一些严重的悲伤:-)

标签: c++ arrays string struct assign


【解决方案1】:

对于类似 C 的字符串,使用 strcpy(),如下所示:

strcpy(c.nome, "something");

您尝试无效的原因是您使用了类似 C 的字符串,而不是 std::string,这是 C++ 方法,并且重载了赋值运算符。在这种情况下,您的结构将如下所示:

#include <string>

struct CLIENTE {
    std::string nome;
    ...
};
CLIENTE c;
c.nome = "something";

您可以避免 typedef,如Difference between 'struct' and 'typedef struct' in C++? 中所述:

在 C++ 中,所有 struct 声明的行为都像是隐含的 typedef'ed,只要名称没有被另一个声明隐藏 同名。

【讨论】:

  • 你为什么建议字符串数组std::string nome[50]。它应该是simply std::string nome;
  • Leftovers @danishansari,但我可以编辑我的帖子,因为它在审核队列中以进行建议的编辑!谢谢!
  • typedef 在 c++ 中也不是必需的,因为您提供的是 c++ 解决方案。
  • 哦,现在我明白你的意思了,谢谢@danishansari!
  • 效果很好!谢谢芽:D 关于typedef 的事情。这是一个学校项目,老师想让学生用20岁的密码……fseek,fread,fopen,fclose,printf ,随便你说吧……
猜你喜欢
  • 2020-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-18
  • 2013-02-21
  • 1970-01-01
相关资源
最近更新 更多