如何使用malloc()分配char数组?

时间:2014-04-01 12:12:49

标签: c pointers malloc

我在尝试填充此数组时遇到问题。有人可以解释出现了什么问题吗?

#include<stdio.h>
#include<stdlib.h>

typedef struct T
{
  char TpCode[4];

}T;

int main(int argc, char **argv)
{
  T *tp;
  tp->TpCode =(char *)malloc(4* sizeof(char));
}

3 个答案:

答案 0 :(得分:2)

在您的代码示例中,您不希望为数组本身分配空间,而是希望分配空间来容纳struct T。这就是你应该做的事情:

int main(int argc, char **argv){
  T *tp;
  tp = malloc(sizeof(*tp));
}

由于数组是struct T的一部分,因此为结构分配空间会隐式地为结构内的数组分配空间。

答案 1 :(得分:0)

对于数组,您不应使用malloc

char TpCode[4]; 

不使用malloc就可以使用。

答案 2 :(得分:0)

这是未定义的行为

    创建T实例时,为您分配
  1. TpCode。这是因为TpCode - 作为固定长度的数组 - 是实际结构的一部分。

  2. 您需要在之前使用它创建T 的实例。写T tp就足够了。或者,T *tp = malloc(sizeof(T));。我将演员放在=的右侧是故意的。