2015-10-24 170 views
-3

首先,我不是很有經驗的C.陣列分割故障三

我不得不面對的一個問題,我需要解決的陣列,我已成功地簡化問題是:

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

char array[5] = {"hello"} 

int main() { 

printf(%s\n", array[0]); 

return (0); 
} 

在這種情況下,我只是試圖打印'h',但我得到了分割錯誤。

+3

使用'%c'而不是'%s'。 – BLUEPIXY

+4

在聲明char時省略{},不要忘記; – PhillipD

+2

此外,請注意,您的字符串不是NUL終止的,並且您在'printf'中缺少'''。 –

回答

2

你必須是固定的一些錯誤,

printf(%s\n", array[0]); 

在這裏,你要打印一個char,嘗試

printf("%c\n", array[0]); 

你缺少一個;

char array[5] = {"hello"} 
         ^

儘管聲明字符串文字,你不需要{}

char array[] = "hello"; 
+0

至於稍微複雜的問題,我試圖逐行打印一個星號字母,以便最終能夠並排打印其他字母。*我不能在評論中發佈代碼嗎? –

+0

@MiguelRestrepo I如果與這個不相關,那就分別提出一個不同的問題 – Haris

+0

對不起,我是這個網站的新手,現在我已經編輯了OP,任何幫助都可以大大的應用reciated。 –

1

首先讓我們看看有什麼%s的那樣 - 它希望與之對應的是一個地址。它開始從該地址逐字節讀取,就好像所有這些字節都是字符一樣,並一直打印它們直到找到空字符\0

現在, char array[5] = {"hello"} 意味着array[0]是 'H' - 這是正確的。但是,有什麼不對的是你使用%s來打印它。因此,%s認爲'h'是一個地址(確切地說,'h'的ascii值是地址)。我猜是104。這可以是一個地址,但不能被你的正常程序訪問(這裏有太多的細節),因此分段錯誤

所以,總之用%c來打印字符。

另外一件事:array[5]不足以容納「hello」 - 因爲它實際上是6個字符,第六個是自動附加到c字符串的終止'\ 0'字符。

+1

感謝您提供更深入的解釋。 –