第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

c語言數組長度問題?

c語言數組長度問題?

C
第七科灬水高 2016-09-01 12:18:20
#include <stdio.h>int main(int argc, char *argv[]){?char s[]={0};?int a;?s[0]='a';s[1]='b';s[2]='c';?a=sizeof(s); ?printf("%d",a);?return 0;}問題為什么我這樣子輸出為1?如果我想得到輸出結果為三該怎么改?
查看完整描述

3 回答

已采納
?
onemoo

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后接的不僅是變量名,而是后接一個表達式(變量名也算表達式的一種)。

查看完整回答
1 反對 回復 2016-09-01
?
噼喱啪啦

TA貢獻392條經驗 獲得超170個贊

想得到3你可以這樣

  1. 直接定義數組的時候?char s[]={'a','b','c'};或是char s=“a,b,c”

  2. 接著學,會有動態(tài)數組的教程,比較少用

  3. 還會有string 類型,一般的字符數組都用string類型,后面char很少用了

查看完整回答
反對 回復 2016-09-01
?
onemoo

TA貢獻883條經驗 獲得超454個贊

數組的大小在定義時就確定了。?

你在定義數組s時沒有指定大小,那么編譯器會根據你提供的初始化列表的元素個數來決定數組的大小。?

而你用的是{0}(只有一個元素0),所以s數組只含有這一個元素0,sizeof s就是一個char的大小1。


因為數組的大小是固定的,你向 s[1] s[2] 中賦值也不會使數組擴大,并且這樣訪問是越界的,這種代碼很不安全。


你想得到結果為3,那就在定義數組時指明其大小為3就好了:char s[3]

查看完整回答
反對 回復 2016-09-01
  • 第七科灬水高
    第七科灬水高
    那請問一下比如說這么一個情況: 我輸入一堆英文字符,但是我想知道這堆英文字符的長度該怎么辦? 還有就是sizeof()這個函數的具體用法是什么?
  • 3 回答
  • 1 關注
  • 1907 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號