1

可能重复:
如何在 C 中使用动态多维数组?
指向数组类型的指针,c

如果我的 C89 ANSI(例如不是 C99)C 代码声明一个变量并使用以下方法分配内存:

char myArray[30000][3];

有没有办法可以通过使用将声明与内存分配分离malloc()?例如(请原谅我的新手):

char *myArray;
int i, arrayLength;
...
/* compute arrayLength */
...
myArray = malloc( sizeof(char) * arrayLength * 3);
for (i=0; ii<arrayLength; i++) 
   strncpy(myArray[i], "ab", 3);
...
free(myArray);

目标是创建myArray看起来像,例如:

myArray[0] = "ab"
myArray[1] = "ab"
myArray[2] = "ab"
...
myArray[arrayLength-1] = "ab"

这是正确的方法吗?

4

1 回答 1

3

看起来您想让第一个数组大小成为可变的运行时值(由 指定arrayLength),同时将第二个大小保持为固定的编译时值(3)。在那种特定情况下,这很容易

char (*myArray)[3];
int arrayLength;
...
/* compute arrayLength */
...
myArray = malloc(arrayLength * sizeof *myArray);
for (i = 0; i < arrayLength; ++i) 
  strcpy(myArray[i], "ab");
...
free(myArray);

如果您决定将第二个数组大小也设为运行时值,事情会变得更加复杂。

PSstrncpy不应该用作strcpy(参见https://stackoverflow.com/a/2115015/187690https://stackoverflow.com/a/6987247/187690)的“安全”版本,所以我strcpy在我的代码中使用. strncpy但如果你愿意,你可以坚持下去。

于 2012-11-21T02:49:54.310 回答