2013-11-20 123 views
2

我正在研究一個項目,該項目要求我創建特定結構類型的數組。該結構是這樣的:將字符數組賦值給結構中的字符數組

typedef struct 
{ 
char array[30]; 
int num; 
}structure 

我已聲明這些結構的陣列是這樣的:

structure struct1[5]; 

我通過這種結構陣列,以填充有字符串和一個前四個元素的函數數。第五個留空。在後面的程序中,我再次傳遞數組並嘗試使用gets()將結構中的字符串設置爲用戶確定的字符串。我得到這個錯誤:

438:19: error: incompatible types when assigning to type 'char[30]' from type 'char *' 

如果我需要提供更多的說明,請告訴我。

謝謝!

編輯:這是我在做什麼:

typedef struct 
{ 
char array[30]; 
int num; 
}structure; 

void fillStructs(structure[]); 
void userEditStructs(structure[]); 

main() 
{ 
structure myStructs[5]; 
fillStructs(myStructs); 
userEditStructs(myStructs); 
return 0; 
} 

void fillStructs(structure s[]) 
{ 
    //code to fill myStructs elements 0-3. 
} 

void userEditStructs(structure s[]) 
{ 
char newArr[30]; 
int newNum; 
printf("Please enter your string:\n\nEntry:\t"); 
gets(newArr); 
printf("Please enter your number:\n\nEntry:\t"); 
scanf("%i", newNum); 
s[5].array = newArr; 
s[5].num = newNum; 
} 
+3

請在將結構數組傳遞給函數的地方添加代碼。 –

+0

使用strcpy而不是運算符= –

+0

永遠不要使用'gets()'。這是危險的,它被棄用,它從C++中刪除,應該從C中刪除。 –

回答

0

不看你可能想要做的是這樣的代碼:

struct[4].array = gets(<unknown>); 

這是行不通的,因爲你不能從gets將返回的char*到一個數組作爲編譯器說。您也正在使用gets,因爲它不執行邊界檢查,所以極不鼓勵。相反,請執行以下操作:

fgets(struct[4].array, sizeof(struct[4].array), stdin); 

這將進行適當的邊界檢查。

3

你正在做這樣的事情

char a[20]; 
a = "bla"; 

你不能做到這一點。

strcpy(a,"bla");改爲。 (#include <string.h>