1樓:迮悌赫連雅青
執行p=a;和p+=3;後p指向的是a[3]的地址,strcpy(p,"abcd")這個函式呼叫把"abcd"複製到從a[3]開始的陣列元素中,執行完後a的內容為,strcpy函式的返回值是第一個引數p的值,即a[3]的地址,它會作為引數傳給strlen函式,strlen函式會從a[3]開始計算字串長度直到遇到'\0',所以得到的結果就是4。
2樓:譙麗甫昊焱
是22吧,12個字母+2個字母+4*2(漢字佔2字元)=22
3樓:京千壽一凡
原因你自己已經說了啊!不加'\0',strlen怎麼知道字串到結尾了?不加時你測到了23,就是因為在第24個單元裡碰巧有個'\0',否則,不知還會是多少呢!
以'\0'結尾的字元型陣列才是字串,沒有'\0'的只是
字元陣列。
4樓:煙奕法滌
是21,漢字2個字元,l、f間的空格1個字元
5樓:亓錦歸丹丹
-----------來自華夏聯盟-----------
因為strlen函式是根據\0判斷結尾的,你不加\0他就往下判斷,直到遇到\0為止
還有問題可以繼續問我
6樓:聽不清啊
在這裡,\63是一個轉義字元,其ascii值為八進位制63,即十進位制51,也就是字元『3』。
接著的\\,就表示一個字元『\』。
再下面的\t,就是製表符tab,也就是接著看到的一段空白。
最後才是abc照原樣輸出。
7樓:花開春未
void main()
我們來分析一下字串 "\63\\\tabc",它是由\63 \\ \t a b c組成,它們的意思分別是:
\63 八進位制的63,即十進位制的51,即字元'3'(查閱ascii表可知)
\\ \
\t 製表符
a a
b b
c c
所以列印字串的結果為: 收到通知3\製表符abc,即你得到的結果 3\ abc
8樓:冰血無雙
\是轉義字元
\6,3,\\,\t,abc
\6不代表任何char型別所以沒有
\t 是代表製表符 所以會空幾個長度
所以結果是3\ abc
9樓:做而論道
可以使用函式,得出長度。
10樓:韓燎笪山
一個漢字是2個字元。空格是一個字元
希望結交一些敢於挑戰,不服現狀的朋友。516qq995590
求字串長度的問題(sizeof)
11樓:匿名使用者
說白了,sizeof是求型別的大小,不管是表示式還是後面直接加型別;換種說法是在其後表示式在記憶體中佔用的位元組。
p是char *型別,當然是4位元組。
你改為char p = "hello";
這就是後面字串的長度。
或者用strlen函式
要是規定只能用sizeof,那就這樣寫。
int size = 0;
while(*p++)
size += sizeof(*p);
沒什麼意義,這樣的**寫出來讓人笑話。
12樓:匿名使用者
首先你要明確sizeof到底是幹什麼的?用來求變數佔用的空間大小sizeof(p);求得是指標p的大小,不管你上面是任何型別,任何字串,都是4,因為指標的空間大小就是4;
char *p="hello";//改成char p="hello";
cout< cout< 13樓:維度科學 回答sizeof是求型別的大小,不管是表示式還是後面直接加型別;換種說法是在其後表示式在記憶體中佔用的位元組。 p是char *型別,當然是4位元組。 改為char p = "hello"; 這就是後面字串的長度。 sizeof(p);求得是指標p的大小,不管你上面是任何型別,任何字串,都是4,因為指標的空間大小就是4; char *p="hello";//改成char p="hello"; cout< cout< 字串在儲存上類似字元陣列 它每一位單個元素都是能提取的,字串的零位是它的長度,如s[0]=10,這提供給我們很多方便,例如高精度運算時每一位都能轉化為數字存入陣列。 通常以串的整體作為操作物件,如:在串中查詢某個子串、求取一個子串、在串的某個位置上插入一個子串以及刪除一個子串等。兩個字串相等的充要條件是: 長度相等,並且各個對應位置上的字元都相等。 設p、q是兩個串,求q在p中首次出現的位置的運算叫做模式匹配。串的兩種最基本的儲存方式是順序儲存方式和連結儲存方式。 更多10條 c語言中關於字串長度的問題 14樓:幻形術 char str; //這是錯誤的,沒有初始化列表時必須指定陣列長度。 char str[10]; //指定了長度為10,不過沒有初始化,所以10個元素值是偽隨機值 char str[10] = ; //指定了長度為10,對每個元素都初始化了 char str[10] = ; //指定了長度為10,顯示初始化了前面幾個元素,後面的元素預設為0 char str = ; //沒有指定長度,但有初始化列表,陣列長度由初始化列表元素個數決定,所以長度是10 15樓: 不,若不在填數字,就必須在初始化這個str,在等號右邊寫具體資料,有幾個資料,編譯器就自動在中填幾了。所以char str這樣寫是錯誤的,要寫成char str=;這樣的形式,編譯器就會認為中是3了。另,char型陣列還可以char str="1234567";這樣來定義,但這時中並不是7而是8,原來編譯器把str作為字串對待了,要在7後自動加一個結束符'\0'。 16樓:戈恆史樂 1.a2.b 3.\034 表示八進位制34所代表的ascii碼字元 4.\\ 表示一個\ 5.\x79 表示16進位制79所代表的ascii碼字元 所以長度為5 1.a2.\045 ascii碼為八進位制45的字元 3.空格 4.05.4 6.57.\' 表示一個單引號8.b 17樓:璩楚華橋 第1個輸出是8 10。sizeof運算子得到的是陣列的佔用位元組的大小,在定義陣列a的時候沒有指明大小,編譯器根據初始化的內容來決定a的大小,"abcdefg"是個字串,連同表示字串結束的'\0'共有8個字元,1個字元型別佔用1個位元組,所以sizeof(a)是8。在定義陣列b的時候已經指明瞭大小,所以sizeof(b)是10。 第2個輸出是5 20。strlen函式是計算字串的長度,字串以'\0'表示結束,所以strlen在遇到hello後面的'\0'時就會返回。sizeof跟第1個問題一樣。 18樓: 錯誤有兩個! 1.char型的字元變數a只代表一個字元,不能代表一個字串。 2.用scanf輸入字串時,出了個控制符要用%s外,後面的應是個地址。若a是個字元陣列,應該用a,而不是&a。況且用scanf輸入時不能輸入空格。 你可以這樣編: #include #include void main() visual c++編譯通過,希望能幫助你 19樓:匿名使用者 你的**出現問題的原因是scanf("%s",&a); ,a是一個char型別的變數,系統為它分配了一個位元組的記憶體空間,但是你卻輸入了一個字串到以a的地址為首地址的一段連續的記憶體空間裡,這樣就出現了越界錯誤.但是printf函式並不檢查越界錯誤,它會按正常的方法執行,然後程式統計出長度,列印出來結果.但是返回到呼叫main函式的作業系統後,系統會發現越界錯誤,所以在結果顯示出來後才出錯. 至於你說的輸入5個以下不會出錯,也許是偶然,也許跟你的編譯器有關.我用vs2005測試,只要輸入就會出錯。 如果你是隻想求出輸入的字串的長度而不要求儲存輸入的字串,下面的**更好。你的標準輸入緩衝區有多大,那麼它就可以求出多長的字串的長度,不會有越界。 #include int main() 20樓: #include main() 這樣 21樓:在太平塔笨豬跳的三角楓 #include main() 編譯通過. c語言中怎樣判斷字串的長度問題啊 22樓:匿名使用者 本題的輸出結果是9 我給你總結這樣的題型。1首先你要知道轉義字元,如\n \t \\ \ddd 等這些屬於轉義字元,只佔一個字串的長度。2. 還有就是\101代表ascii碼的為101的字元'a',記住\376 以內的都佔一個字串長度,他們都代表ascii中的某個字母,數字,或亂碼。 希望你看對以後這樣的題都做滿分 23樓:匿名使用者 答案是9首先我們來分析一下,\\是一個,1,4,1是3個,已經4個了,\141是一個,5個了,a,b,c是3個,總共8個了,最後\t是一個,總共9個。 該怎麼做?首先要特別注意\這個轉義字元,後面跟著的和它組成一個字元,在上面這道題上最主要的是\141很有迷惑性,這'\141'表示的是字元'a',它是以3位8進駐的ascii碼錶示的,所以以後做題時要注意\後面的字元和3位數字,其實他們表示的是一個字元而已。 字串長度的定義 24樓:吧狂吊絲 字串長度是指字串所含的字元個數,但不包括最後的'\0'。 c語言的字串是由字元陣列形式儲存的,並約定'\0'(ascii碼值為0)作為字串結束符。其長度為從字串開始,到'\0'結束,所有字元的個數,不包括'\0'本身。 關鍵在於c字串有個結尾0, 處理時需要注意. 定義字串長度有兩種方式, 一種是用字串的大小, 一種是字串的長度. 字串的大小即記憶體空間的大小, 而串長度加1才是所需空間. 正確:char str[max_size]; char str[max_len + 1]; 錯誤:char str[max_size + 1]; char str[max_len]; 擴充套件資料 字串主要用於程式設計,概念說明、函式解釋、用法詳述見正文,這裡補充一點:字串在儲存上類似字元陣列,所以它每一位的單個元素都是可以提取的。 如s=「abcdefghij」,則s[1]=「a」,s[10]="j",而字串的零位正是它的長度,如s[0]=10(※上述功能ansistring沒有。),這可以給我們提供很多方便,如高精度運算時每一位都可以轉化為數字存入陣列。 字串或串(string)是由數字、字母、下劃線組成的一串字元。一般記為 s=「a1a2···an」(n>=0)。它是程式語言中表示文字的資料型別。 在程式設計中,字串(string)為符號或數值的一個連續序列,如符號串(一串字元)或二進位制數字串(一串二進位制數字)。 通常以串的整體作為操作物件,如:在串中查詢某個子串、求取一個子串、在串的某個位置上插入一個子串以及刪除一個子串等。兩個字串相等的充要條件是: 長度相等,並且各個對應位置上的字元都相等。 設p、q是兩個串,求q在p中首次出現的位置的運算叫做模式匹配。串的兩種最基本的儲存方式是順序儲存方式和連結儲存方式。
輸入五個字串,然後按字串長度從小到大排序,先把源程式複製一下,char string 5 定義了指標陣列。include include include int main for i 0 i 5 i printf nbefore sort n for i 0 i 5 i for i 0 i 5 i ... 文字 include stdio.h define n 1000 int main int argc,char argv char s n 1 ch int k,t,n printf enter a text.n for n 0 nif ch getchar n break s n ch s n 0... 直接使用 tempdefault str 的意思就是 tempdefault str 0 strtail tempdefault str 這樣寫就等於是strtail tempdefault str 0 原因是 strhead,strtail這兩個指標用的不對,也就是你取的地址是不對的,自然後面的s...輸入若干字串,按字串長度由小到大重新排序輸出 使用指標陣列處理
C語言求字串中最長單詞的長度問題
字串的問題