c - C中的结构问题

标签 c

我的结构如下所示:

typedef struct {
      unsigned long attr;
      char fileName[128];
} entity;

然后我尝试分配一些值但收到一条错误消息...

int attribute = 100;
char* fileNameDir = "blabla....etc";

entity* aEntity;

aEntity->attr = attributes;
aEntity->fileName = fileNameDir;

编译器告诉我:

Error: #137: expression must be a modifiable lvalue aEntity->fileName = fileNameDir;

为什么我不能在这里将这个字符分配给结构中的字符?

谢谢

最佳答案

  • 您将 char[](和 char*,FTM)视为字符串。哪个不是。您不能分配给数组,您必须复制值。此外,文件名的 128 长度似乎是任意的,并且可能是缓冲区溢出的潜在来源。使用 std::string 有什么问题?这让你摆脱了所有这些问题。
  • 你正在定义一个指向某个实体的指针,不要初始化它,然后使用它就好像它指向的随机地址是一个有效的实体目的。
  • 在 C++ 中不需要 typedef struct,因为与 C 不同,在 C++ 中 struct 名称存在于相同的 namespace 中作为其他名称。

如果您绝对必须使用问题中定义的 struct(它是预定义的),那么请查看其他答案并获得自己的 "The C Programming Language" 。否则,您可能需要使用此代码:

struct entity {
  unsigned long attr;
  std::string fileName;
};

entity aEntity;
aEntity.attr = 100;
aEntity.filename = "blabla....etc";

关于c - C中的结构问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1265117/

相关文章:

c - 如果在函数中使用, "b"中 "return b++"的增量会怎样?

c - 如何拆分大型.a静态库?

php - 提高CPU密集型PHP脚本的性能

c - 为什么 SDL2 无法在 Xcode 中加载我的 .bmp? (SDL_加载BMP)

在C中从二进制文件转换为十六进制

c - 函数在 Release模式下崩溃,但在调试器中运行完美

python - PyOpenCL 2D 数组内核 get_global_id(1) 错误

c - 我如何用 C 练习 Unix 编程?

c - 无法在 Mac 上使用 gsl 进行编译

c - 学习C : noob suitable debugger