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) にし、2 番目のサイズをコンパイル時の固定値 ( 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);

2 番目の配列サイズも実行時の値にすると、事態はさらに複雑になります。

PSは( https://stackoverflow.com/a/2115015/187690https://stackoverflow.com/a/6987247/187690strncpyを参照)の「安全な」バージョンとして機能することを想定していないため、コードで使用しました. しかし、あなたが望むなら、あなたは固執することができます.strcpystrcpystrncpy

于 2012-11-21T02:49:54.310 に答える