מה אתה שומר בעצם שם?
אתה שומר דבר שנראה מהצורה 0x982343 שמצביע לכתובת הנמוכה בזכרון בה מאוחסנים ה-char-ים.כשאתה משתמש ב-%s אתה בעצם אומר לקומפיילר לגשת לכתובת הנ"ל
ושם להתחיל לקרוא char-char.
כשאתה מבצע %s על [char[0, (למשל), אתה בעצם אומר לקומפיילר שתוכן התא בכתובת הנ"ל - הוא בעצם כתובת למקום אחר בזכרון שם נמצא מערך ה-char-ים.
כלומר
**str במקום מה שהתכוונת, ומכיוון שאתה ניגש, לאיזו כתובת שקרית - כמובן שתראה הרבה זבל.
בשביל לראות תו יחיד אתה צריך, כפי שהסבירו לך, להשתמש ב-%c.
ככה הוא אומר, "אה, הקלט שהכנסת לי זה כבר התו המבוקש, ולא שאני צריך להסתכל בכתובת של מה שנתת לי ולקרוא את כל התווים", ולכן זה כן יעבוד.
בברכה,
עידן