这就是代码:
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]
时程序将关闭。我需要了解它为什么会发生。
答案 0 :(得分:1)
在阅读之前,您需要为字符串分配空间!
使用malloc()
执行此操作(例如,在读取输入之前),或声明3D数组,而不是2D。
答案 1 :(得分:1)
您要求scanf
将字符串保存到指针中
初始化。它没有任何意义。要解决这个问题,你需要先分配
一些内存手动为你的字符串,然后设置指针。对于
例如:
#define MAX_LEN 101
char *names[10];
for (int i = 0; i < 10; i++)
names[i] = malloc(sizeof(char) * MAX_LEN);
我不确定为什么你在第一个时使用多维数组 尺寸为1.这些2D阵列可以轻松减少到1D。 如果您打算将它用作一维字符串数组(2D字符),请使用 代替:
char names[10][MAX_LEN];
这里第一个维度是字符串的数量,第二个维度是 它们的大小。由于它是自动分配的,因此您不需要 自己动手。
两个重要的评论:
scanf
以格式字符串(即"%100s"
)