我正在尝试创建一个函数,用于向三个指针数组(firstArray、lastArray、scoreArray)中的每一个添加 1 个元素。对于这个特定的作业,我应该使用指针和动态内存,但不使用结构。
就像现在的程序一样,它会自动转移到添加附加记录并等待用户输入的所有 3 部分。但是,当程序在运行 addRecords() 函数后调用 printRecords() 函数时,我收到段错误。我认为这意味着我没有将 addRecords() 函数中所做的更改传递回主函数,因此,printRecords() 函数尝试的位置没有存储任何内容读书。我已经尝试过几次但一无所获。
我应该如何更改 addRecords() 中的 3 个问题行,将对数组所做的更改传递回主函数?
void printRecords(char **firstArray, char **lastArray, float **scoreArray, int n);
void addRecords(char **firstArray, char **lastArray, float **scoreArray, int *j);
int main(int argc, char** argv) {
int i = 0, n = 0;
printf("Please indicate the number of student records to be entered:");
scanf("%d",&n);
char **firstArray;
char **lastArray;
float **scoreArray;
firstArray = (char **)malloc(n*sizeof(char *));
lastArray = (char **)malloc(n*sizeof(char *));
scoreArray = (float **)malloc(n*sizeof(float *));
for(i=0;i<n;i++)
{
printf("Enter Record %d:",i+1);
firstArray[i] = (char *)malloc(n*sizeof(char));
lastArray[i] = (char *)malloc(n*sizeof(char));
scoreArray[i] = (float *)malloc(n*sizeof(float));
scanf("%s",firstArray[i]);
scanf("%s",lastArray[i]);
scanf("%f",scoreArray[i]);
}
addRecords(firstArray,lastArray,scoreArray,&n);
printRecords(firstArray,lastArray,scoreArray,n);
return (EXIT_SUCCESS);
}
void printRecords(char **firstArray, char **lastArray, float **scoreArray, int n)
{
int i = 0;
printf("\nPrinting %d student records....\n",n);
for(i=0;i<n;i++)
{
printf("Record %d: %s - %s - %.2f\n",i+1,firstArray[i],lastArray[i],*scoreArray[i]);
}
}
void addRecords(char **firstArray, char **lastArray, float **scoreArray, int *j)
{
int t = *j; //Assigning current number of records to temp variable
t++; //Increment by 1
*j = t; //Passes the new number of records back to main
printf("Enter Record %d:",t);
firstArray[t] = (char *)malloc(t*sizeof(char));
lastArray[t] = (char *)malloc(t*sizeof(char));
scoreArray[t] = (float *)malloc(t*sizeof(float));
scanf("%s",firstArray[t]); **//PROBLEM LINES**
scanf("%s",lastArray[t]); **//PROBLEM LINES**
scanf("%f",scoreArray[t]); **//PROBLEM LINES**
printf("\nNew record added successfully");
return;
}
最佳答案
我认为你的字符串内存分配非常困惑。您有两层 - 指针数组和它们指向的实际字符串。您将以大小 n 分配一次数组。奇怪的是,字符串也以大小 n 分配?这些可能应该基于问题的某些参数。然后,在 addRecords 中,您可以根据当前记录数以可变大小分配添加的字符串,但实际上并不扩展指针数组。
最后,请确保在读取记录时对字符串强制执行长度限制,以免浪费内存。
关于c - 尝试将新值传递给指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47126577/