动态内存分配和指针

问题描述 投票:0回答:1

我正在努力解决指针及其分配问题。 我想了解我的分配是否正确,否则应该如何进行。 另外,我收到有关 fgets 和 put 函数的警告,但我认为这与错误的分配有关。

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

const int n = 30, m = 30;

struct employer { 
    char *name[3][1];
    char *pass[n][m];
    int *ID;
};

int main() {
    struct employer admin;
    i = 0;
    for (i = 0; i < 3; i++) {
        admin.name[i][1] = (char*)calloc(1, n); 
    }
 
    for (i = 0; i < 3; i++) {
        fgets(admin.name[i][1], n, stdin);
        puts(admin.name[i][1]);
    }
 
    return 0;
}

以下是我收到的警告:

  • 数组索引 1 超出数组末尾(包含 1 个元素)[-Warray-bounds]";
  • 数组索引 1 超出数组末尾(包含 1 个元素)[-Warray-bounds]";
  • 数组索引 1 超出数组末尾(包含 1 个元素)[-Warray-bounds]";

它们分别与我分配的行有关,即 fgets fcn 行和 puts fcn 行。 你能告诉我哪里错了吗?

c pointers struct dynamic-memory-allocation fgets
1个回答
0
投票

您的代码中有两个错误。首先,您在

i
中使用了
main
但未声明它。其次,您要寻址长度为
1
的数组中的索引
1
。由于数组从
0
开始索引,因此您应该使用索引
0

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

const int n = 30, m = 30;

struct employer { 
    char *name[3][1];
    char *pass[n][m];
    int *ID;
};

int main() {
    struct employer admin;
    size_t i = 0;
    for (i = 0; i < 3; i++) {
        admin.name[i][0] = (char*)calloc(1, n); 
    }
 
    for (i = 0; i < 3; i++) {
        fgets(admin.name[i][0], n, stdin);
        puts(admin.name[i][0]);
    }
 
    return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.