我有以下C个代码:

int *a;
size_t size = 2000*sizeof(int);
a = malloc(size);

这很好用.但如果我有以下几点:

char **b = malloc(2000*sizeof *b);

其中b的每个元素都有不同的长度.

怎么可能对b做与我对a做的相同的事情;也就是说,下面的代码是正确的?

char *c;
size_t size = 2000*sizeof(char *);
c = malloc(size);

推荐答案

首先,您需要分配指针数组,比如char **c = malloc( N * sizeof( char* )),然后为每一行分配一个对malloc的单独调用,可能是在循环中:


/* N is the number of rows  */
/* note: c is char** */
if (( c = malloc( N*sizeof( char* ))) == NULL )
{ /* error */ }

for ( i = 0; i < N; i++ )
{
  /* x_i here is the size of given row, no need to
   * multiply by sizeof( char ), it's always 1
   */
  if (( c[i] = malloc( x_i )) == NULL )
  { /* error */ }

  /* probably init the row here */
}

/* access matrix elements: c[i] give you a pointer
 * to the row array, c[i][j] indexes an element
 */
c[i][j] = 'a';

如果您知道元素的总数(例如N*M个),则可以在单个分配中执行此操作.

C++相关问答推荐

当包含头文件时,gcc会发出隐式函数声明警告

为什么PLT表中没有push指令?

是否有任何情况(特定类型/值),类型双关在所有符合标准的C实现中产生相同的行为?

在C中使用动态内存分配找到最小的负数

数据包未从DPDK端口传输到内核端口

如何将字符串argv[]赋给C中的整型数组?

将整数的.csv文件解析为C语言中的二维数组

为什么C语言允许你使用var =(struct NAME){

有没有可能我不能打印?(C,流程)

试图从CSV文件中获取双精度值,但在C++中始终为空

如何在C中打印包含扫描字符和整数的语句?

错误:包含文件时类型名称未知

试图创建一个基本的Word克隆,但遇到了障碍

递归打印二维数组(C编程)

基于蝶数恰好有8个除数的事实的代码

将复合文字数组用作临时字符串缓冲区是否合理?

Linux/C:带有子进程的进程在添加waitid后都挂起

struct 中的qsort,但排序后的 struct 很乱

C 和 C++ 标准如何告诉您如何处理它们未涵盖的情况?

C 预处理器中的标记分隔符列表