struct-C中字符串的二维数组

时间:2017-10-31 03:53:32

标签: c pointers struct

我正在尝试使用指针在结构中创建一个二维数组,因为我是c的新手,并且在指针主题中变得非常混乱。求救!

struct course
{
    char *coursecode;
    char *coursesession[5];
};

int main()
{

    int n = 0;
    int numSession = 0;
    struct course *main = malloc(sizeof(struct course));



    printf("Enter the course code and the session in this order:");
    scanf("%s", main->coursecode);
    printf("Enter the number of session required:");
    scanf("%d", &numSession);
    for (int i = 0; i < numSession; ++i)
        {
            printf("Enter the session code (M1...):");
            scanf("%s", main->coursesession[i]);
        }
    ++n;
}

2 个答案:

答案 0 :(得分:1)

您已将coursecode声明为指向char的指针,但您需要为其分配空间,您可以使用malloc进行操作。

您已将coursesession声明为指向char的5个指针数组。您需要为所有5个指针分配空间,再次使用malloc

或者,您可以将它们都声明为数组,例如

struct course
{
    char coursecode[100];
    char coursesession[5][100];
};

这声明coursecode为100 char的数组,coursesession为5个100 char数组的数组。显然,您可以将100调整为您需要的任何内容,但无论如何都会修复存储大小。

答案 1 :(得分:0)

您可以修改此类代码

#include <stdio.h>
#include<stdlib.h>


struct course
{
   char *coursecode;
   char *coursesession[5];
};

int main()
{

    int n,i = 0;
    int numSession = 0;
    struct course main;

    main.coursecode = (char *)malloc(100*sizeof(char));
    printf("Enter the course code and the session in this order:");
    scanf("%s", main.coursecode);
    printf("Enter the number of session required:");
    scanf("%d", &numSession);
    for (i = 0; i < numSession; ++i)
    {
        printf("Enter the session code (M1...):"); 
        main.coursesession[i] = (char *)malloc(100*sizeof(char));
        scanf("%s", main.coursesession[i]);
    }
    ++n;
    free(main.coursecode);
    for (i = 0; i < numSession; ++i){
        free(main.coursesession[i]);
    }
}