【问题标题】:Error malloc on string from argv来自 argv 的字符串上的 malloc 错误
【发布时间】:2013-10-06 21:03:25
【问题描述】:

我正在使用从 arg 接收到的字符串来返回另一个带有随机字符的字符串。

int size = strlen(argv[4]);
char* res = malloc(size+1);

然后 res 填充了 argv[4] 的字符,但是当我在控制台中输入 'test' 时,它返回 'Test?' (当我不改组字母而只是逐个字符地复制字符串时)。

为什么会这样?

如果我把 size+100 改为,它可以工作,但我不明白为什么。

【问题讨论】:

  • 你是如何复制字符串的?你包括\0 吗?
  • 确实,我忘了包含 \0,现在已更正,但这不是问题。谢谢!
  • @Sheeft 检查 cmets 并编辑您接受的答案 - 这是错误的,但它可能掩盖了您的实际问题。
  • @NigelHarper 与 +100 最初掩盖问题的方式完全相同。
  • _当我在控制台中输入“测试”时 .... _ 你能显示提供给程序的所有参数吗?你玩 4-th = argv[4]。 argv[1], argv[2], argv[3] 好吗?

标签: c command-line-arguments argv strlen argc


【解决方案1】:

那是因为你没有考虑到 char 的大小。这应该可以解决问题:

char* res = (char*)malloc((size+1)*sizeof(char))

【讨论】:

  • 哦,是的,谢谢,我使用 sizeof(char) 而不是 sizeof(char*)……我确实成功了!
  • 为什么要乘以 sizeof(char *) ?这绝对不是正确的答案。
  • 由于 sizeof(char) 始终为 1,因此您编辑的答案与 OP 的答案完全相同,因此它不是答案。
  • 对,但现在我不明白为什么它不能像现在这样工作......
  • 我不明白怎么做,但现在问题似乎得到了纠正(我回到了原来的样子)。有点奇怪 !谢谢你的回答。
猜你喜欢
  • 1970-01-01
  • 2021-07-24
  • 2012-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多