结构的扫描使程序崩溃
scanf of struct makes program crash
这是代码。函数 "leggi" 应该读取 c[i].a 的值,但是当我在控制台中键入第一个数字时,程序崩溃了。
这可能是一个指针问题,但我无法弄清楚
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
typedef struct cane{
int a;
}cane;
void leggi(cane *c[20]){
int i;
for(i=0;i<5;i++)
scanf("%d", &c[i]->a );
}
int main(){
int i;
cane c[20];
leggi(&c);
for(i=0;i<5;i++)
printf("%d",c[i].a);
return 0;
}
您向函数传递了错误的类型。
如果要将数组传递给函数,数组名称会衰减为指向其第一个元素的指针,因此参数只是指向以下类型的指针:
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
typedef struct cane{
int a;
}cane;
void leggi(cane *c){
int i;
for(i=0;i<5;i++)
scanf("%d", &(c[i].a) );
}
int main(){
int i;
cane c[20];
leggi(c);
for(i=0;i<5;i++)
printf("%d",c[i].a);
return 0;
}
&c
的类型是 cane (*)[20]
即指向数组的指针。您已将函数的参数声明为 cane *[20]
,它是(作为函数参数)一个 cane**
,它是一个指向指针的指针。
您可能打算改为传递指向数组元素的指针:
void leggi(cane *c)
// ...
scanf("%d", &c[i].a );
//
leggi(c);
或者您可能真的打算传递一个指向数组的指针:
void leggi(cane (*c)[20])
scanf("%d", &(*c)[i].a )
//
leggi(&c);
这是代码。函数 "leggi" 应该读取 c[i].a 的值,但是当我在控制台中键入第一个数字时,程序崩溃了。 这可能是一个指针问题,但我无法弄清楚
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
typedef struct cane{
int a;
}cane;
void leggi(cane *c[20]){
int i;
for(i=0;i<5;i++)
scanf("%d", &c[i]->a );
}
int main(){
int i;
cane c[20];
leggi(&c);
for(i=0;i<5;i++)
printf("%d",c[i].a);
return 0;
}
您向函数传递了错误的类型。
如果要将数组传递给函数,数组名称会衰减为指向其第一个元素的指针,因此参数只是指向以下类型的指针:
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
typedef struct cane{
int a;
}cane;
void leggi(cane *c){
int i;
for(i=0;i<5;i++)
scanf("%d", &(c[i].a) );
}
int main(){
int i;
cane c[20];
leggi(c);
for(i=0;i<5;i++)
printf("%d",c[i].a);
return 0;
}
&c
的类型是 cane (*)[20]
即指向数组的指针。您已将函数的参数声明为 cane *[20]
,它是(作为函数参数)一个 cane**
,它是一个指向指针的指针。
您可能打算改为传递指向数组元素的指针:
void leggi(cane *c)
// ...
scanf("%d", &c[i].a );
//
leggi(c);
或者您可能真的打算传递一个指向数组的指针:
void leggi(cane (*c)[20])
scanf("%d", &(*c)[i].a )
//
leggi(&c);