2012-12-15 99 views
0

我試圖在C中打印一個字符數組,但我無法打印所有內容。 我想打印: B1 B2 我 代碼:如何打印字符的二維數組的內容?

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

int main() { 
    char def[3][10];  //define a multidimensional array of characters 
    strcpy(def[0],"b1"); //insert "b1" at first line 
    strcpy(def[1],"b2"); //insert "b2" at first line 
    printf("%s",def); //print everything? 
} 

上面的代碼打印只是b1。我已經嘗試過:

printf("%s",def[0]); 
printf("%s",def[1]); 

但我有錯誤「無效的數組的使用未指定邊界」

+1

你不能只是打印字符的多維數組。你想要打印什麼? – Linuxios

+0

我試圖單獨打印每一行,但我不能。 – Dchris

+0

@Dchris:那你爲什麼不發佈你試過的代碼? – bitmask

回答

2
printf("%s", def); 

%s轉換規範需要一個字符串。 def是一個字符串數組,而不是一個字符串。

打印第一串做到這一點:

printf("%s", def[0]); 

,如果你要打印的第二個字符串,然後做到這一點:

printf("%s", def[1]); 

,如果你要同時打印字符串:

printf("%s%s", def[0], def[1]); 

打印陣列中的所有字符串:

for (i = 0; i < sizeof def/sizeof *def; i++) 
{ 
    printf("%s", def[i]); 
} 
0

你首先用像這樣的語法初始化數組,這樣整個數組獲得空值。 然後按照相同的步驟,您可以在輸出中獲得字符串。

語法: char def [3] [10] = {};

或 首先定義這個數組,然後通過bzero函數使整個數組爲零值。

bzero(def,sizeof(def));

您需要在程序中包含stdlib.h頭文件。

+0

空初始值設定項和'bzero'不是標準C,並且這些都不能解決問題,因爲'strcpy'在目標字符串的末尾添加了一個終止空字符,停止了'* printf'。無論如何,如果不是真的需要填充一些東西,效率不高。你只需要一個''\ 0''來停止。 – effeffe

0

你可以打印的char整個多維數組作爲一個字符串,用一個單一的呼叫:

printf("%s", (char*) multiDimensionalArray); 

因爲多維數組的元素是contiguos。但是,正如簡單的數組一樣,printf在第一個終止字符處停止,所以通常沒有意義,因爲我們幾乎總是在每個「行」的末尾都有一個終止字符,就像您一樣,或者是一些未初始化的垃圾。

char def[3][2]; 

memcpy(def[0], "b1", 2); 
memcpy(def[1], "b2", 2); 

def[2][0] = '\0'; 

printf("%s", (char*) def); // print everything 

但是用這種方式使用數組是痛苦的,你需要的是一個循環遍歷數組。

(你可以簡單地使用*puts打印字符串)