2016-07-29 24 views
0

我有使用數組來實現堆棧代碼,這裏的完整代碼:here堆棧:不能推幾個字符到數組

的情況是,爲什麼我不能推多個字符,但 只有一個字符? 但我一直在點擊一些變量在一個數組的形式使用struct她推 一些字符初始化:

struct stackMhs { 
char nama[10]; 
char npm[10]; 
char telp[10]; 
int size; 
}; 

struct stackMhs stackMhsbaru; 

這是push()函數的參數,這將是數據的內容功能main()

void push(char nm, char np, char tel) { 
if(stackMhsbaru.size != 10) { 
stackMhsbaru.nama[stackMhsbaru.size + 1] = nm; 
stackMhsbaru.npm[stackMhsbaru.size + 1] = np; 
stackMhsbaru.telp[stackMhsbaru.size + 1] = tel; 
stackMhsbaru.size++; 
} 
else { 
printf("stack is full!"); 
} 
} 

問題是,當我使用'填寫的數據是一樣的push('a','b','c');功能push()只有一個字符時,在編譯沒有錯誤,但是當我使用"push("aa","bb","cc");當編譯時錯誤:

main.c: In function 'main': 
main.c:60:6: warning: passing argument 1 of 'push' makes integer from pointer without a cast [-Wint-conversion] 
push("aa", "bb", "cc"); 
    ^
main.c:23:6: note: expected 'char' but argument is of type 'char *' 
void push(char nm, char np, char tel) { 
    ^
main.c:60:12: warning: passing argument 2 of 'push' makes integer from pointer without a cast [-Wint-conversion] 
push("aa", "bb", "cc"); 
     ^
main.c:23:6: note: expected 'char' but argument is of type 'char *' 
void push(char nm, char np, char tel) { 
    ^
main.c:60:18: warning: passing argument 3 of 'push' makes integer from pointer without a cast [-Wint-conversion] 
push("aa", "bb", "cc"); 
       ^
main.c:23:6: note: expected 'char' but argument is of type 'char *' 
void push(char nm, char np, char tel) { 
    ^

我的問題是:任何解決辦法嗎?

+0

你的推送功能以「炭」參數,則必須更換它通過char *或字符串數​​據類型 – Berkay92

+0

「size」初始化在哪裏? – sjsam

回答

2

在C中,''內部任何是一個字符(使用char聲明)和內部""任何表示一個字符串,它是char秒的空值終止陣列。

您不能將char s的數組分配給單個char變量,因此您會看到警告。

說明的警告:

warning: passing argument 1 of 'push' makes integer from pointer without a cast

爲了說明起見,假設編譯器裝置,char當它說int的話,基本上是抱怨,你想分配char數組類型到一個char沒有明確地告訴編譯器,你想這樣做。做你正在嘗試什麼

正確方法:

通過文字傳遞字符串字符稱爲環路內push功能。

+2

'假設編譯器在表示int時表示char。不需要假設,編譯器的意思是'char',它是一個'integer'類型。 – sjsam

1

首先,您應該嘗試關注更多關於代碼縮進的內容,這對我們來說更容易閱讀。

現在,針對您的問題:在'c'"c"之間的C存在巨大差異。第一個只是一個字符,第二個是空終止字符數組,這是完全不同的。

當您撥打push("aa", "bb", "cc");時,您將3個字符數組賦予需要3個字符的函數,這就是爲什麼您的代碼無法工作。

要繞過這一點,你可以打電話給你的功能多的時間與你的字符數組的所有不同的角色:

char *str = "foo"; 
while (*str) 
    push(*(str++)); 

這樣一來,在您的字符串的while將循環,並調用push()功能將所有可用字符str

0

當您使用opeator []你得到一個字符指針 如果你想使用它的char * 用這種方式

struct stackMhs { 
char* nama[10]; 
char* npm[10]; 
char telp[10]; 
int size; 
}; 

void push(char* nm, char* np, char* tel) { 
if(stackMhsbaru.size != 10) { 
    if(!nm)strcpy(stackMhsbaru.nama[stackMhsbaru.size + 1],nm); 
    if(!np)strcpy(stackMhsbaru.npm[stackMhsbaru.size + 1],np); 
    if(!tel)strcpy(stackMhsbaru.telp[stackMhsbaru.size + 1],tel); 
stackMhsbaru.size++; 
} 
}