矩阵不保留多个值

Matrix doesn't keep more than one value

也就是代码:

int qtd_alunos, qtd_temas;
char* tnome[1][10];
char* anome[1][10];

printf("\nPra distribuir os temas me diga quantos alunos vao participar e aperte enter, depois a quantidade de temas.");
scanf("%d%d", &qtd_alunos, &qtd_temas);
printf("Agora vai escrevendo o nome de cada tema\n");

for(int j = 0; j<qtd_temas; j++){
    printf("Tema %d\n", j+1);
    scanf("%s", tnome[0][j]);
    printf("%s ok!\n",tnome[0][j]); }
return 0; }

当我运行代码时程序只保存位置"tnome[0][0]",但是当"int j"变为[0][1]时程序关闭。我需要了解为什么会这样。

您需要先为您的字符串分配 space 才能读取它们!

使用 malloc() 这样做(例如在读取输入之前),或者声明 3D 数组,而不是 2D。

您要求 scanf 将字符串保存到指针中 未初始化。它指向任何地方。要解决此问题,您需要先分配 手动为您的字符串分配一些内存,然后设置指针。为了 示例:

#define MAX_LEN 101

char *names[10];

for (int i = 0; i < 10; i++)
    names[i] = malloc(sizeof(char) * MAX_LEN);

我不确定你为什么在第一次使用时使用多维数组 维度的大小为 1。这些二维数组可以很容易地简化为一维。 如果您打算将其用作一维字符串数组(字符的二维),则使用 相反:

char names[10][MAX_LEN];

这里第一个维度是字符串的数量,第二个维度是 它们的大小。而且因为它是自动分配的,所以你不需要 自己做。

两条重要说明:

  • 启用编译器警告。
  • 小心缓冲区溢出:您可以限制字符串的大小 在格式字符串中由 scanf 读取(即 "%100s"