[英]Struct function doesn't work with my array
因此,我基本上有了一個結構,該結構的名稱必須是可區分的,並帶有一個ID。 我認為它可能看起來像這樣。
typedef struct {
char *name;
unsigned int id;
} person;
現在,我將以給定的開始編寫一個函數:
person *readData();
結構和名稱都必須是可分辨的,我想使用malloc函數來做到這一點。 對於所有人,也應該有一個數組,我們將其命名為“ people [1000]”。
這是我對具有主要功能的所說功能的嘗試:
int count = 0;
person *readData() {
int i, len;
char puffer[1000];
printf("Name: ");
scanf_s("%999s", &puffer);
len = strlen(puffer);
people[count].name = (char *)malloc((len + 1)*sizeof(char));
for (i = 0; i < len; i++)
people[count].name[i] = puffer[i];
people[count].name[len] = '\0';
}
void main(void)
{
person *people[1000];
readData();
printf("\n%s\n", people[count].name);
}
好吧,這似乎不起作用。 Visual Studio在該函數中表示,“人員”必須為union或struct類型。 任何快速輸入? 因為我剛開始學習它,所以它只是基本的C語言。
編輯:完整代碼:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
char *name;
unsigned int id;
} person;
person people[1000];
int count = 0;
person *readData() {
int i, len;
char puffer[1000];
printf("Name: ");
scanf_s("%999s", &puffer);
len = strlen(puffer);
people[count].name = (char *)malloc((len + 1)*sizeof(char));
for (i = 0; i < len; i++)
people[count].name[i] = puffer[i];
people[count].name[len] = '\0';
}
void main(void){
readData();
printf("\n%s\n", people[count].name);
}
在您的readData
函數的主體中未定義people
變量。 這就是為什么編譯器因錯誤而失敗。
您可以將變量傳遞給函數person *readData(person *people)
。 不要忘記更改readData();
readData(people);
在main
功能上。
如果只需要一維數組,則不要將指針表示法與數組表示法混在一起。 使用person people[1000];
而不是person *people[1000];
您的函數readData不了解您的人員數組。 如果按照以下方式重寫它:
void readData(person** people) {
your code
}
void main() {
person* people[100];
readData(people);
}
它應該更好。
請參閱zavgs答案以獲取更多改進的地方。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.