我想创建一个每周时间表的矩阵,该矩阵必须有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];
这个有效,但我不相信它,因为字符串的大小是不确定的。它可能会崩溃。
答案 0 :(得分:2)
也许你是以错误的方式使用char Schedule[8][5][10]
,正确的方法就是这样做(一个例子)
scanf("%s",Schedule[i][j]);
char *Schedule[8][5]
可以信任,如果您知道它基本上是40 char*
,您可以根据需要分配内存。
对于第二种情况,您可以在Schedule[i][j]=malloc(sizeof(char)*n)
这些是在代码中使用char数组的常用方法。这些是创建char数组并使用它们的方法。 你不会找到其他方法来做同样的事情。
OP在评论中说:扫描价值观有效,谢谢。但为什么“Schedule [i] [j] =”abc“” 不起作用?
Ans:你不能在数组上使用赋值。数组不能在C中赋值。您可以使用strcpy(Schedule[0][0] ,"sdwdwd");
1 ,因为您知道目标能够保存字符串lliteral。
1。不建议使用strcpy。这里作为一个例子给出了一个快速的想法。为了更安全strcpy
使用strcat
,例如this