C语言 一个程序读取学生的名字,并把他们放在一个字符串数组,由使用它的人定义,是不工作的

yxyvkwin  于 2022-12-02  发布在  其他
关注(0)|答案(1)|浏览(81)

所以我用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;
}
ljo96ir5

ljo96ir51#

一步一步来。
在c语言中,字符串是一个以\0(空字符)结尾的字符数组。这意味着它是一个字符 *,可以被传递;指向第一个字符的指针。这不需要动态分配,但在您的情况下,需要
由于您需要动态大小的数组,因此需要malloc一个char * 指针数组

char *names = malloc(sizeof(char*) * no);

即我们需要no字符 * 指针
接下来,我们需要为每个名称分配空间(目前我们所拥有的都是no初始化指针)
我们需要多少空间?让我们选择一个任意的缓冲区大小,比如说100个字符
我会这么做

.....
      char name_buff[100]; // accept up to 99 chars
      scanf_s("%99s", name_buff); 
      names[n] = strdup(name_buff);
      ....

这个函数使用了我最喜欢的函数之一strdup,它分配了正确大小的内存,然后将字符串复制到新分配的插槽中。
不要忘了free,这意味着循环遍历名称,释放每个条目,然后释放名称

相关问题