我对C语言很陌生,也为数组的内存分配和字符串存储为字符数组而感到困惑。
我想创建一个二维数组的字符串,其中包含 n 行,2列和可变大小的字符串长度。所以它的结构看起来像这样。
char people = {
{"name1..", "info.."},
{"name2..", "info.."},
{"name3..", "info.."},
}
我将 n 用作用户输入,所以我知道数组将包含多少行。
当用户使用realloc键入内容时,我将如何使用malloc定义这样的数组并调整为字符串分配的空间大小。 还是有更好的方法将这样的数据存储在C中?
我希望能够像这样使用它:
printf("%s", people[0][0]);
prints: name1..
people[0][0][4] = 'E';
//Change the fifth letter of this element to for example E
我已经尝试了很多事情,但是似乎没有什么能像我想要的那样工作。
答案 0 :(得分:0)
使用指向char *
的指针可以实现您的要求。
请参考以下示例。
char ***arr; // to hold n*2 strings
int n =3;
arr = malloc(n*sizeof(char **));
int i = 0;
for (i =0;i<n;i++)
{
arr[i] = malloc(2*sizeof (char *)); // to hold single row (2 strings)
arr[i][0] = malloc(10); // to hold 1st string
arr[i][1] = malloc(10); // to hold 2nd string
strcpy(arr[i][0],"name");
strcpy(arr[i][1],"info");
arr[i][0][4] = 'E'; // As you wished to change particular char
printf("%s %s", arr[i][0], arr[i][1]);
printf("\n");
}
要调整特定字符串的大小,可以使用realloc
,如下所示。
char *temp;
temp = realloc(arr[1][0], 100);
arr[1][0] = temp;
免责声明:我尚未添加任何绑定和错误检查。