我试图使用指向指针的指针来表示字符串数组。所以我定义char** arr
如下:
uint8_t lines = getLines();
char** arr = malloc (sizeof (char*) * lines);
// char** arr = malloc (sizeof (char*) * ROWS_COUNT);
在调试过程中,上面的行将成功执行,并将内存分配给arr
。尝试分配足够的内存以保存*(arr + 0)
中的字符串时出现问题(因此,错误(,如下所示:
// #define PATH_MAX 4096
*arr = malloc (sizeof (char) * (PATH_MAX + 1));
运行时错误:
Signal: SIGSEGV (Segmentation fault)
注意:我使用了转换运算符(第一个由char**
分配,第二个由char*
分配(。它也不起作用。
注意:为了简单起见,我在这里使用了ROW_COUNTS
。在原始代码中,我使用了一个lines
变量而不是ROWS_COUNT
。 lines
包含一个uint8_t
值。(就我而言,3
(
malloc()
中动态分配内存,试试这段代码:-
char (*arr)[ROWS_COUNT][PATH_MAX + 1] = malloc (sizeof(*arr));
您可以使用以下方法访问字符串:-
(*arr)[ index ]
和使用字符:-
(*arr)[ row ] [ column ]
例:-
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define PATH_MAX 4096
#define ROWS_COUNT 500
int main()
{
char (*arr)[ROWS_COUNT][PATH_MAX + 1] = malloc (sizeof(*arr));
strcpy((*arr)[400],"Hello World");
printf("n String : %s",(*arr)[400]);
printf("n Character : %c",(*arr)[400][2]);
}
输出:-
String : Hello World
Character : l
// #define PATH_MAX 4096
*arr = malloc (sizeof (char) * (PATH_MAX + 1));
我认为这条线需要在ROWS_COUNT
次的循环中。以便可以为要存储的所有行分配内存。
使用Xcode(版本9.3(9E145((在MAC上测试,工作正常:
char** arr = (char**) malloc (sizeof (char*) * 1000);
int i = -1;
while(++i < 1000)
{
*(arr + i) = (char*) malloc (sizeof (char) * (PATH_MAX + 1));
}