所以我用c语言做了一个程序,目的是读取学生的平均成绩和他们的名字,所以我必须做一个字符串数组,包括他们的名字等等,但是这个数组的大小是由使用程序的人定义的,所以当然这个数组需要被分配为一个指针,但是我该怎么做呢?我该怎么把数组作为指针来分配呢?又该怎么读这个数组呢?
我做了一些代码,但我不知道它的错误是什么,因为ide没有显示它我的目标是知道学生的名字,将其添加到一个数组中,数组的大小由用户指定。
#include<stdio.h>
#include <stdlib.h>
int main()
{
float b=0;
int op=0;
int x=0;
int i=0;
double* w;
float q=0;
int h = 0;
int p=0;
int n=0;
int no=0;
printf("enter how much students that u gonna type \n");
scanf_s("%d", &no);
char* g = (char*)malloc(no* sizeof(char));
while (n != no , n++) {
g[n] = malloc(no* sizeof(char));
printf("enter the name of the student of number %d ", n);
scanf_s("%c", & g[n]);
printf("enter how much grades u wanna type for this student\n");
scanf_s("%d", &p);
char* w = (double*)malloc(p * sizeof(double));
while ( i != p, i++)
{
w[n] = malloc(p * sizeof(char));
printf("type the %d", i);
printf("º grade\n");
scanf_s("%f", &w[i]);
}
}while(x==no,x++)
{
while (op !=p, op++)
{
b = w[op] / n;
printf("the student average is %c", g[x]);
printf(" e %f\n", & b);
}
}
return 0;
}
1条答案
按热度按时间ljo96ir51#
一步一步来。
在c语言中,字符串是一个以\0(空字符)结尾的字符数组。这意味着它是一个字符 *,可以被传递;指向第一个字符的指针。这不需要动态分配,但在您的情况下,需要
由于您需要动态大小的数组,因此需要malloc一个char * 指针数组
即我们需要
no
字符 * 指针接下来,我们需要为每个名称分配空间(目前我们所拥有的都是
no
初始化指针)我们需要多少空间?让我们选择一个任意的缓冲区大小,比如说100个字符
我会这么做
这个函数使用了我最喜欢的函数之一
strdup
,它分配了正确大小的内存,然后将字符串复制到新分配的插槽中。不要忘了
free
,这意味着循环遍历名称,释放每个条目,然后释放名称