c - C、Visual Studio 中的 Malloc

标签 c visual-studio-2015

<分区>

为什么 malloc 分配 6 个字节的 char 类型,但我需要 2 个字节。 如果我分配1个字节,他分配5个字节。 我不明白为什么。

#include "stdlib.h"

int     main()
{
  char *lin = malloc(2);
  lin[0] = 'a';
  lin[1] = 'b';
  char *line = (char *)malloc(sizeof(char) * 2);
  line[0] = 'z';
  line[1] = 'b';

  printf("lin = %s\nline = %s\n", lin, line);

  get_next_line(fd, line);
  return (0);
}

那表明控制台

lin = ab¤¤¤¤
line = zb¤¤¤¤

最佳答案

在 C 中,一个 ASCII字符串表示为一个非零字节序列,后跟一个值为零的字节,请参阅 Null-terminated byte strings .字符串 "ab" 表示为包含值 0x61、0x62、0x00 的数组。

例子:

string:     'a'  | 'b'  |
memory:     0x61 | 0x62 | 0x00

快速修复:

char *lin = malloc(3); // allocate one more char
lin[0] = 'a';
lin[1] = 'b';
lin[2] = '\0';         // terminate the string

在你的例子中,malloc 没有分配 6 个字节,printf 只是打印伪随机“垃圾​​”,因为你的字符串不是零终止的。

关于c - C、Visual Studio 中的 Malloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41379125/

相关文章:

c - 为什么我可以用 'static' 限定符声明一个没有类型的变量? (在 C 中)

c++ - 为什么对于gcc 'UNIX'和 'unix'宏不是同一回事?

c# - Visual Studio 2013/2015 测试项目模板 - 用于 NUnit?

visual-studio - Visual Studio 2015 更新 2. Team Explorer 不工作

Azure:Web.config 连接字符串'参数不能为 null 或为空

C编程: how to input and output integers with more than 10 digits?

c - 使用 scanf() 从键盘读取时从先前输入读取换行符

c++ - 从左侧调整大小时窗口闪烁

c# - 空白通用 Windows 应用程序和控制台应用程序之间的区别

c++ - 从弧度转换为度数