【问题标题】:Why does "strcat" on an array cause overwriting?为什么数组上的“strcat”会导致覆盖?
【发布时间】:2017-10-23 06:25:36
【问题描述】:
strcat(argv[1], ".txt");
puts(argv[1]);
strcat(argv[2], ".txt");
puts(argv[2]);
puts(argv[1]);

假设第一个([1])参数称为“a”,第二个([2])称为“b”。此代码提供以下输出: a.txt txt.txt a.txt.txt

为什么会这样??似乎 strcat 开始覆盖 arg[2]?

【问题讨论】:

  • C 中的“字符串管理”不同。

标签: c strcat


【解决方案1】:

您不应该对分配用于存储argv[i] 指向的字符串的内存量做出任何假设。特别是,你不能假设你可以通过strcat-ing 来扩展这些字符串。这样做通常会导致未定义的行为。这正是您在实验中观察到的。

虽然修改argv[i] 指向的字符串而不改变它们的长度是合法的,但通常不可能将它们“扩展”到位。可以想象,这些字符串可能会立即在内存中彼此跟随,这意味着写入 argv[1] 指向的字符串末尾之后的任何内容都会覆盖 argv[2] 指向的字符串等等。

【讨论】:

  • 我明白了,那么我将如何附加 .txt 结尾?
  • @Hedhed 制作另一个字符串。使用 (malloc) 分配足够的字节
  • @Hedhed:将.txt 直接附加到存储在argv[1] 指向的内存位置的字符串而不是创建一个完全独立的字符串的预期效果是什么?
猜你喜欢
  • 2021-10-29
  • 2018-04-09
  • 1970-01-01
  • 2022-01-21
  • 1970-01-01
  • 2014-06-27
  • 2014-11-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多