2015-09-19 37 views
0

有代碼中使用C:c char字符數組打印,使用子程序

const char *bits[] = {"0000","0001","0010"}; 

當我打電話的printf函數,它工作正常:

prinft("%s",bits[1]); // this prints correct value 

但是當我嘗試調用子程序功能停止程序:

print(*bits); 
void print(const char *bits) 
prinft("%s",bits[1]); // system stops working 

如何打印正確的值?

+1

查看參數的類型。 – ameyCU

+2

首先,請嘗試學習如何創建[最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)。然後針對你的問題,看看你的'print'函數的正式參數,然後想一想在函數中'bits [x]'意味着什麼。 –

+0

「prinft」?不會編譯。 – Olaf

回答

2

當您撥打print(*bits)時,您給bits[0]作爲參數,即char*。然後你告訴printf輸出一個字符串(它是C中的char*),並且你給它bits[1],它實際上是char,特別是bits中的第二個charprintf會將此值視爲char*,這自然會導致問題。

+0

@Olaf措辭不良,不需要,因此刪除了該部分。感謝您的評論。意思是如果我建議發送'char **',其中'bits'可以直接給出。 –

1

起初,我是一名中國學生。也許我的英文寫作不好。

我認爲你的代碼有一些錯誤。 你應該理解指針(例如:int * ptr或int ptr []),指針指向一個指針(例如:int ** ptr或int * ptr [])。在你的代碼中,位是一個指針指向指針,因爲你同時使用了*和[]。 所以,如果你想要的比特傳輸到print()函數,你應該如下使用

void print(const char **bits){ 
    printf("%s\n", bits[0]); 
} 

,或者你可以寫的print():

void print(const char *bits){ 
    printf("%s\n", bits); 
} 

//in main() 
print(bits[0]); 

這取決於你是什麼打印( ) 去做。

ps:這是我在Stack Overflow上的第一個答案。如果你發現一些英文的語法錯誤,請告訴我.Thx。

+0

是的。感謝您的評論。解決方案在這裏。需要記住這個**指針/ *指針(根據情況)。 – icemanzzz