3 回答

TA貢獻883條經驗 獲得超454個贊
內容太長,我另寫一個回答:
對于不確定將要存儲多少個字符的情形,你只能先定義一個足夠長的數組,比如char s[256]; ?
在接受輸入時不要用那種可以一次性存入一串字符的函數(如scanf("%s", s)),因為你不知道會有多少個字符被輸入,用戶輸入的字符串可能會超過數組的大小,這會導致“溢出”,這是很典型的錯誤和安全隱患。
應該一個字符一個字符地接受輸入,比如用for循環(huán)getchar(),同時要記下已經輸入的字符個數,如果超范圍了就停止接受輸入(并提示用戶輸入超長...之類的)。 最后別忘了在字符串尾加上'\0'('\0'是字符串結束的標志)
輸入完畢后,你可以用?strlen 之類的函數算出有多少個字符。或者你也可以自己算:從數組開頭開始數,直到遇到'\0'。
關于 sizeof:
注意!它不是函數,它是個操作符。它會返回操作數占用內存的大?。ㄒ詁yte為單位,類型是size_t)
sizeof有兩種用法:
sizeof 變量名 :得到的是這個變量占用內存的大小
sizeof (類型名) :得到的是這個類型占用內存的大小
sizeof后接的如果是個數組名,就會返回整個數組占用的內存大小。
比如在你的代碼中,sizeof s 就返回1,因為你的s只有一個char元素,一個char元素占一字節(jié)。
如果?char s[256],那么?sizeof s 就返回 256 * char占用字節(jié)數 = 256。 ?所以你不能用 sizeof s 來求得 s 中有多少個字符,s中也許只存了5個字符,但 sizeof 得到的是整個 s 數組的大小。你只能用 strlen 之類的方法來得到實際字符數。
P.S. 準確地說,sizeof的第一個用法中,sizeof后接的不僅是變量名,而是后接一個表達式(變量名也算表達式的一種)。

TA貢獻392條經驗 獲得超170個贊
想得到3你可以這樣
直接定義數組的時候?char s[]={'a','b','c'};或是char s=“a,b,c”
接著學,會有動態(tài)數組的教程,比較少用
還會有string 類型,一般的字符數組都用string類型,后面char很少用了

TA貢獻883條經驗 獲得超454個贊
數組的大小在定義時就確定了。?
你在定義數組s時沒有指定大小,那么編譯器會根據你提供的初始化列表的元素個數來決定數組的大小。?
而你用的是{0}(只有一個元素0),所以s數組只含有這一個元素0,sizeof s就是一個char的大小1。
因為數組的大小是固定的,你向 s[1] s[2] 中賦值也不會使數組擴大,并且這樣訪問是越界的,這種代碼很不安全。
你想得到結果為3,那就在定義數組時指明其大小為3就好了:char s[3]
- 3 回答
- 1 關注
- 1907 瀏覽
添加回答
舉報