【问题标题】:How to use a dynamic matrix in C如何在 C 中使用动态矩阵
【发布时间】:2013-10-07 20:36:50
【问题描述】:

我有一个由我定义的数据类型,我想创建一个该数据类型的矩阵,但我无法使用它。

我有 typedef 字符数据[10];

data  **matrix;
matrix=(data**)malloc(n*sizeof(data*));
for (i=0;i<x;++i)
    matrix[i]=(data*)malloc(m*sizeof(data));
matrix[i][j]="example";

但是在最后一行我得到一个错误,说不兼容的类型,即使我使用相同类型的数据(在这种情况下来自动态向量)。 创建或使用矩阵是否有错误?

【问题讨论】:

  • 显示estado的代码
  • 你为什么使用data变量?
  • 这段代码没有任何意义。在最后一行中,您将字符串文字 "example" 分配给定义为 estado 的任何内容。无论如何都可能是错误的
  • 抱歉,已修复。我正在使用数据类型,因为我想创建一个矩阵,其中每个元素都是一个小字符串
  • 每个标记为c... 的问题下应该有一个“自动添加"don't cast the return value of malloc()" 评论”按钮)这实际上是今天的第5 个(左右)问题谁的作者犯了这个错误。

标签: c dynamic matrix malloc


【解决方案1】:

这里

matrix[i][j]="example";

您分配给非法的数组。试试这个:

strcpy( matrix[i][j], "example" );

请注意 strcpy 不安全,请为您的系统使用更安全的替代方案 - strlcpystrcpy_s。或者您可以按照H2CO3的建议。

【讨论】:

  • memcpy() 并手动 NUL 终止。这将很快导致缓冲区溢出。 (这也适用于你,@Jack。)
【解决方案2】:

假设 estado 是 char 类型。

estado  **matrix = malloc(n*sizeof(char*));  //allocte number of pointers 

for (i=0;i<x;++i);       
matrix[i]=malloc(m); //allocate each pointer
matrix[i]="example";

假设 estado 是 int 类型。这与结构相同。

estado  **matrix = malloc(n*sizeof(int*)); //allocte number of pointers 

for (i=0;i<x;++i); 
{      
matrix[i]=malloc(m *sizeof(int)); //allocate each pointer

for(j=0;j<m;j++)  
matrix[i][j]=1;  or You can also use `memcpy()`  
}

【讨论】:

  • 无论如何,应该更喜欢分配一个真正的多维数组,像这样:char (*arr)[size_y] = malloc(size_x * sizeof *arr);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-27
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 2014-01-15
  • 2012-12-20
  • 2015-06-02
相关资源
最近更新 更多