我想创建一个每周时间表矩阵,它必须有 8 行和 5 行。每个字符串有 10 个字符。可以像这样使用 malloc 来做到这一点:
char ***Schedule = (char ***)malloc(ROW*sizeof(char **));
for (int i = 0; i < ROW; i++)
{
Schedule[i] = (char **)malloc(COL*sizeof(char *));
for (int j = 0; j < COL; j++)
Schedule[i][j] = (char *)malloc(SIZE*sizeof(char));
}
但我不想使用 malloc,因为看起来代码行太多,矩阵的大小已经很小(8*5*10 = 400 字节)。
char Schedule[8][5][10];
上面的代码不起作用。
char *Schedule[8][5];
这个有效,但我不相信它,因为字符串的大小是不确定的。它可能会崩溃。
最佳答案
也许你正在以错误的方式使用 char Schedule[8][5][10]
,正确的方法是这样做(示例)
scanf("%s",Schedule[i][j]);
char *Schedule[8][5]
如果您知道它基本上是您可以根据需要为其分配内存的 40 char*
,则可以信任。
对于第二种情况,您可以在 Schedule[i][j]=malloc(sizeof(char)*n)
中分配
这些是在代码中使用字符数组的常用方法。这些是创建 char 数组和使用它们的方法。 您找不到其他方法可以做到这一点。
OP 在评论中提问:
Scanning the values worked, thanks. But why " Schedule[i][j] = "abc" " doesn't work?
回答:不能对数组赋值。数组在 C 中是不可赋值的。在这里你可以使用 strcpy(Schedule[0][0] ,"sdwdwd");
1 因为你知道目的地能够容纳字符串 lliteral.
1。不建议使用 strcpy。这里显示为一个例子,让用户快速了解。为了更安全 strcpy
使用 strcat
像 this
关于在 C 中创建一个字符串矩阵(没有 malloc 也没有初始化),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47058645/