C新手在这里。我一直在寻找论坛,似乎无法得到我需要的帮助。 我想做的很简单。我在我的标题中声明了一个结构,然后我创建了一个这种结构的数组。
然后我调用一个函数,传入一个指向这个结构数组的指针,但是在函数中我得到了错误:
错误:请求会员' XXXXX'在不是结构或联合的东西中
我相信这个错误是我将结构数组传递给函数的方式,但我似乎无法找到正确的方法。
我的header.h如下:
#ifndef HEADER_H_INCLUDED
#define HEADER_H_INCLUDED
typedef struct PhoneNumber
{
char name[40];
unsigned char number[10];
} PhoneNumber;
#endif // HEADER_H_INCLUDED
我还没有真正完成我的显示功能,我的代码如下:
#include <stdio.h>
#include <stdlib.h>
#include "header.h"
int main()
{
struct PhoneNumber PhoneNumbers[10];
//input phone number
inputPhoneNumbers(&PhoneNumbers);
//display PhoneNumber
displayPhoneNumbers(&PhoneNumbers);
return EXIT_SUCCESS;
}
int inputPhoneNumbers(int size, PhoneNumber *details[size])
{
size = 0;
printf("Enter a name\n");
scanf("%s\n", &details[size].name);
printf("Enter %s's number\n", details[size]->name);
scanf("%s\n", &details[size].number);
return EXIT_SUCCESS;
}
int displayPhoneNumbers(PhoneNumber *number)
{
printf("%s\n",number->name);
printf(number->number);
}
有人能指出我正确的方向吗?
干杯!
答案 0 :(得分:3)
符号需要保持一致。你有:
scanf("%s\n", &details[size].name);
printf("Enter %s's number\n", details[size]->name);
scanf("%s\n", &details[size].number);
我认为应该是:
scanf("%s\n", details[size]->name);
printf("Enter %s's number\n", details[size]->name);
scanf("%s\n", details[size]->number);
然而,还有许多其他问题,我仍在努力。
这是单个文件SSCCE(Short, Self-Contained, Correct Example)。
#include <stdio.h>
#include <stdlib.h>
typedef struct PhoneNumber
{
char name[40];
unsigned char number[10];
} PhoneNumber;
int inputPhoneNumbers(int size, PhoneNumber details[size]);
void displayPhoneNumbers(PhoneNumber *number);
int main(void)
{
struct PhoneNumber PhoneNumbers[10];
inputPhoneNumbers(10, PhoneNumbers);
displayPhoneNumbers(PhoneNumbers);
return EXIT_SUCCESS;
}
int inputPhoneNumbers(int size, PhoneNumber details[size])
{
size = 0;
printf("Enter a name\n");
scanf("%s\n", details[size].name);
printf("Enter %s's number\n", details[size].name);
scanf("%s\n", details[size].number);
return EXIT_SUCCESS;
}
void displayPhoneNumbers(PhoneNumber *number)
{
printf("%s\n", number->name);
printf("%s\n", number->number);
}
此处的主要变化是inputPhoneNumbers()
功能的类型更改;你想传递一个PhoneNumber
数组,而不是一个指向PhoneNumber
的指针数组。这意味着一致的表示法使用.
而不是->
。
答案 1 :(得分:1)
更改int inputPhoneNumbers(int size, PhoneNumber *details[size])
到int inputPhoneNumbers(int size, PhoneNumber *details)
并像这样称呼它
inputPhoneNumbers(10,PhoneNumbers);
答案 2 :(得分:0)
这是一种让你迷惑的尝试(希望不会让自己感到困惑)。同样,Jonathan指出,要保持一致,我会尝试使用最简单的表示法。
访问结构
PhoneNumber a;
printf("%s", a.name); // Note a.name is a char pointer to the first byte of name
通过指针
PhoneNumber *a;
printf("%s", a->name); // Uninitialized pointer, would need allocation
结构数组
PhoneNumber a[10];
printf("%s", a[0].name);
printf("%s", (a+0)->name); // note a is a PhoneNumber pointer to the a[0]
指向结构的指针数组
PhoneNumber *a[10];
printf("%s", a[0]->name); // Note a[0] is an uninitialized pointer
printf("%s", (*a[0]).name); // One would need to allocate storage
指向结构数组的指针
PhoneNumber (*a)[10];
printf("%s", (*a)[0].name);
printf("%s", a[0][0].name);
// Sometimes, when you have the right address, you can simply cast:
printf("%s", ((PhoneNumber*)a)->name);
以下是您可能想要做的事情:
int main()
{
struct PhoneNumber PhoneNumbers[10]; // Array of structs, contiguous in memory
//input phone number
inputPhoneNumbers(PhoneNumbers); // Pass a pointer to the first element
//display PhoneNumber
displayPhoneNumbers(PhoneNumbers);
return EXIT_SUCCESS;
}
int inputPhoneNumbers(int size, PhoneNumber *details) // Take a pointer to a PhoneNumber
{
/// ...
}