【问题标题】:Assign value to struct in C为C中的结构赋值
【发布时间】:2016-06-07 16:45:06
【问题描述】:

我正在构建一个游戏,当我使用以下代码更改 2d-map 中的值时

char example[100];
strcpy(example, " ");
strcat(example, player1->unitName[j]);
strcat(example, " ");
map->map[x][y] = example;

我在地图更改中举例说明的全部值。

我想我是把指针指向示例。

有什么办法可以只放示例的值而不是地址或指针?

【问题讨论】:

  • 分配缓冲区并将内容复制到其中。 strdup() 如果有的话会很方便。
  • 你能告诉我在这种情况下如何使用 strdup() 吗?谢谢!

标签: c struct strcpy


【解决方案1】:

您应该为每个元素分配新的缓冲区并像这样复制内容。

char example[100], *buffer;
strcpy(example, " ");
strcat(example, player1->unitName[j]);
strcat(example, " ");
buffer = malloc(strlen(example) + 1); /* +1 for terminating null-character */
if (buffer != NULL) {
    strcpy(buffer, example);
} else {
    /* handle error */
}
map->map[x][y] = buffer;

如果您的系统中可用,您可以使用strdup()。

char example[100];
strcpy(example, " ");
strcat(example, player1->unitName[j]);
strcat(example, " ");
map->map[x][y] = strdup(example);

【讨论】:

  • +1。不要忘记释放内存。另一个例子是有一个三维数组:map->map[x][y][100] = "Who's your daddy?";。但当然,由于内存浪费,这被认为是一种不好的做法。
  • @AndrejsCainikovs 不知道实际定义,您的示例看起来像是执行超出范围的访问和无意义的指针到整数的转换。不应该是strcpy(map->map[x][y], "Who's your daddy?");吗?
  • 糟糕。道歉。工作中的 Python 太多了。开始搞砸了:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-23
  • 1970-01-01
  • 2021-05-04
  • 1970-01-01
  • 1970-01-01
  • 2021-05-15
  • 1970-01-01
相关资源
最近更新 更多