C内存分配 - char*和char sizeof

fex*_*fex 0 c

在C中分配字符串的形式是正确的?

char *sample;

sample = malloc ( length * sizeof(char) );
Run Code Online (Sandbox Code Playgroud)

要么

sample = malloc ( length * sizeof(char*) );
Run Code Online (Sandbox Code Playgroud)

为什么占用1个字节char*需要4个char字节?

unw*_*ind 6

假设目标是存储一串length字符,正确的分配是:

sample = malloc(length + 1);
Run Code Online (Sandbox Code Playgroud)

笔记:

  1. 不要使用sizeof (char),因为它始终为1,它不会添加任何值.
  2. 记住终结符,我假设(基于名称)length是字符串的可见字符的长度,strlen()即将返回length.
  3. 我知道你没有,但是值得指出的是,也不应该有任何返回值malloc().

原因char *更大的是它是指针类型,指针几乎总是大于单个字符.在许多系统(例如你的系统)上,它们是32位,而字符只是8位.由于指针需要能够表示机器内存中的任何地址,因此需要更大的尺寸.在64位计算机上,指针通常是64位,即8个字符.

  • 虽然`sizeof(char)`没有添加任何东西,但它使得目的明确是关于发生了什么.我想这是一个品味问题. (2认同)