代码找错
发布网友
发布时间:2022-05-01 19:40
我来回答
共2个回答
热心网友
时间:2022-06-30 14:42
将main()中的String指针传递给函数void inputString(String * s,int n) 时,只是传递了指针的一个拷贝,函数中分配的内存,是对s的拷贝指针进行的,并没有对主函数中的指针分配内存,可以用返回值,或者双重指针来给String s分配内存
#include<stdio.h>
#include<conio.h>
#include<malloc.h>
#include <stdlib.h>
/*
先输入字符串的个数n,再输入n个字符串(每个字符串小于8个字符),再输出各个字符串。
*/
/****************************************************************************/
typedef struct {
char * name;
} String ;
/******************************************************************************/
void inputNumberString(int * n); /*输入字符串的个数n*/
String* inputString(String * s,int n); /*输入n个字符串*/
void display(String * s,int n); /*输出各个字符串*/
/*****************************************************************************/
int main() {
int n;
String * s=NULL;
inputNumberString(&n); /*输入字符串的个数n*/
s=inputString(s,n); /*输入n个字符串*/
display(s,n); /*输出各个字符串*/
getch();
return 0;
}
/*******************************************************************************/
void inputNumberString(int * n) {
printf("Please input the number of the string:\n");
scanf("%d",n);
}
/********************************************************************************/
String* inputString(String * s,int n) {
int i;
if((s=(String *)malloc(n*sizeof(String)))==NULL) {
printf("Error:No enough memory for String\n");
getch();
exit(1);
}
for(i=0;i<n;i++) {
if((s[i].name=(char *)malloc(8*sizeof(char)))==NULL) {
printf("Error:No enough memory for string[%d].name\n",i);
getch();
exit(1);
}
scanf("%s",s[i].name);
}
return s;
}
/*****************************************************************************************/
/************************************************************************************/
void display(String * s,int n) {
int i; /*循环计数器*/
for(i=0;i<n;i++) {
printf("%d,%s:\n",i+1,s[i].name);
}
}
热心网友
时间:2022-06-30 14:42
display(s,n);一句中s = NULL故发生了访问违例。
因为void inputString(String * s,int n) 接收参数s是按值传参数的,故返回后s还是NULL