首先,我不是很有經驗的C.陣列分割故障三
我不得不面對的一個問題,我需要解決的陣列,我已成功地簡化問題是:
#include <stdio.h>
#include <string.h>
char array[5] = {"hello"}
int main() {
printf(%s\n", array[0]);
return (0);
}
在這種情況下,我只是試圖打印'h',但我得到了分割錯誤。
首先,我不是很有經驗的C.陣列分割故障三
我不得不面對的一個問題,我需要解決的陣列,我已成功地簡化問題是:
#include <stdio.h>
#include <string.h>
char array[5] = {"hello"}
int main() {
printf(%s\n", array[0]);
return (0);
}
在這種情況下,我只是試圖打印'h',但我得到了分割錯誤。
你必須是固定的一些錯誤,
printf(%s\n", array[0]);
在這裏,你要打印一個char
,嘗試
printf("%c\n", array[0]);
你缺少一個;
char array[5] = {"hello"}
^
儘管聲明字符串文字,你不需要{}
char array[] = "hello";
至於稍微複雜的問題,我試圖逐行打印一個星號字母,以便最終能夠並排打印其他字母。*我不能在評論中發佈代碼嗎? –
@MiguelRestrepo I如果與這個不相關,那就分別提出一個不同的問題 – Haris
對不起,我是這個網站的新手,現在我已經編輯了OP,任何幫助都可以大大的應用reciated。 –
首先讓我們看看有什麼%s的那樣 - 它希望與之對應的是一個地址。它開始從該地址逐字節讀取,就好像所有這些字節都是字符一樣,並一直打印它們直到找到空字符\0
。
現在, char array[5] = {"hello"}
意味着array[0]
是 'H' - 這是正確的。但是,有什麼不對的是你使用%s來打印它。因此,%s認爲'h'是一個地址(確切地說,'h'的ascii值是地址)。我猜是104。這可以是一個地址,但不能被你的正常程序訪問(這裏有太多的細節),因此分段錯誤
所以,總之用%c來打印字符。
另外一件事:array[5]
不足以容納「hello」 - 因爲它實際上是6個字符,第六個是自動附加到c字符串的終止'\ 0'字符。
感謝您提供更深入的解釋。 –
使用'%c'而不是'%s'。 – BLUEPIXY
在聲明char時省略{},不要忘記; – PhillipD
此外,請注意,您的字符串不是NUL終止的,並且您在'printf'中缺少'''。 –