C語言求字串長度的問題,c語言如何求字串長度?

2022-03-28 22:11:51 字數 5959 閱讀 3321

1樓:布玉文慈

你的**出現問題的原因是scanf("%s",&a);

,a是一個char型別的變數,系統為它分配了一個位元組的記憶體空間,但是你卻輸入了一個字串到以a的地址為首地址的一段連續的記憶體空間裡,這樣就出現了越界錯誤.但是printf函式並不檢查越界錯誤,它會按正常的方法執行,然後程式統計出長度,列印出來結果.但是返回到呼叫main函式的作業系統後,系統會發現越界錯誤,所以在結果顯示出來後才出錯.

至於你說的輸入5個以下不會出錯,也許是偶然,也許跟你的編譯器有關.我用vs2005測試,只要輸入就會出錯。

如果你是隻想求出輸入的字串的長度而不要求儲存輸入的字串,下面的**更好。你的標準輸入緩衝區有多大,那麼它就可以求出多長的字串的長度,不會有越界。

#include

intmain()

2樓:庫鴻熙隗楊

#include

main()

編譯通過.

3樓:竇弘益是文

錯誤有兩個!

1.char型的字元變數a只代表一個字元,不能代表一個字串。

2.用scanf輸入字串時,出了個控制符要用%s外,後面的應是個地址。若a是個字元陣列,應該用a,而不是&a。況且用scanf輸入時不能輸入空格。

你可以這樣編:

#include

#include

void

main()

visual

c++編譯通過,希望能幫助你

4樓:哀碧春別楠

這兩個答案肯定是不一樣的!

strlen的含義是求字串的長度,也就是串中的字元數,不包括最後的那,而sizeof的含義是求字串所佔的記憶體大小,自然要算上最後的那。

因此。。。

strlen

9分別是0,\(\\,轉義字元),1,2,5,回車,a,b,table(空白符)到第一個'\0'時就結束了

strlen

15記憶體中是0,\(\\,轉義字元),1,2,5,回車,a,b,table(空白符),'\0',a,0,0,'\0','\0'(最後一個是字串結束的標誌)。

有問題的話可以再和我交流。。。。

5樓:居芷藍邱作

#include

main()這樣

c語言如何求字串長度?

6樓:布玉文慈

你的**出現問題的原因是scanf("%s",&a);

,a是一個char型別的變數,系統為它分配了一個位元組的記憶體空間,但是你卻輸入了一個字串到以a的地址為首地址的一段連續的記憶體空間裡,這樣就出現了越界錯誤.但是printf函式並不檢查越界錯誤,它會按正常的方法執行,然後程式統計出長度,列印出來結果.但是返回到呼叫main函式的作業系統後,系統會發現越界錯誤,所以在結果顯示出來後才出錯.

至於你說的輸入5個以下不會出錯,也許是偶然,也許跟你的編譯器有關.我用vs2005測試,只要輸入就會出錯。

如果你是隻想求出輸入的字串的長度而不要求儲存輸入的字串,下面的**更好。你的標準輸入緩衝區有多大,那麼它就可以求出多長的字串的長度,不會有越界。

#include

intmain()

7樓:在秋浦河擊沙袋的龍柏

我的方法和樓上的大同小異用指標法:#include "stdio.h"

void main()

非指標法(這個方法是呼叫系統函式,比之自己寫的函式簡單明瞭):#include "stdio.h"

#include "string.h"

void main()

8樓:勢曼華楚戌

計算長度有兩個函式:strlen

sizeof

strlen

計算字串裡面一共有多少個字元

sizeof

計算字串佔的總記憶體空間

如:char

str[20]=;

strlen(str);等於

6sizeof(str);

等於20

-物聯網校企聯盟技術部

9樓:1024程式設計師

c語言經典例子之計算一個字串的長度

c語言求字串長度的問題

10樓:匿名使用者

你的**出現問題的原因是scanf("%s",&a); ,a是一個char型別的變數,系統為它分配了一個位元組的記憶體空間,但是你卻輸入了一個字串到以a的地址為首地址的一段連續的記憶體空間裡,這樣就出現了越界錯誤.但是printf函式並不檢查越界錯誤,它會按正常的方法執行,然後程式統計出長度,列印出來結果.但是返回到呼叫main函式的作業系統後,系統會發現越界錯誤,所以在結果顯示出來後才出錯.

至於你說的輸入5個以下不會出錯,也許是偶然,也許跟你的編譯器有關.我用vs2005測試,只要輸入就會出錯。

如果你是隻想求出輸入的字串的長度而不要求儲存輸入的字串,下面的**更好。你的標準輸入緩衝區有多大,那麼它就可以求出多長的字串的長度,不會有越界。

#include

int main()

11樓:

#include

main() 這樣

12樓:在太平塔笨豬跳的三角楓

#include

main()

編譯通過.

13樓:

錯誤有兩個!

1.char型的字元變數a只代表一個字元,不能代表一個字串。

2.用scanf輸入字串時,出了個控制符要用%s外,後面的應是個地址。若a是個字元陣列,應該用a,而不是&a。況且用scanf輸入時不能輸入空格。

你可以這樣編:

#include

#include

void main()

visual c++編譯通過,希望能幫助你

14樓:榊桗桗

用不著5個啊。

你一共就開闢了1個字元的空間,肯定要錯的。

15樓:匿名使用者

你的字元指標沒有指向一個具體的空間

c語言中關於字串長度的問題

16樓:幻形術

char str; //這是錯誤的,沒有初始化列表時必須指定陣列長度。

char str[10]; //指定了長度為10,不過沒有初始化,所以10個元素值是偽隨機值

char str[10] = ; //指定了長度為10,對每個元素都初始化了

char str[10] = ; //指定了長度為10,顯示初始化了前面幾個元素,後面的元素預設為0

char str = ; //沒有指定長度,但有初始化列表,陣列長度由初始化列表元素個數決定,所以長度是10

17樓:

不,若不在填數字,就必須在初始化這個str,在等號右邊寫具體資料,有幾個資料,編譯器就自動在中填幾了。所以char str這樣寫是錯誤的,要寫成char str=;這樣的形式,編譯器就會認為中是3了。另,char型陣列還可以char str="1234567";這樣來定義,但這時中並不是7而是8,原來編譯器把str作為字串對待了,要在7後自動加一個結束符'\0'。

18樓:戈恆史樂

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

19樓:璩楚華橋

第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個問題一樣。

20樓:

錯誤有兩個!

1.char型的字元變數a只代表一個字元,不能代表一個字串。

2.用scanf輸入字串時,出了個控制符要用%s外,後面的應是個地址。若a是個字元陣列,應該用a,而不是&a。況且用scanf輸入時不能輸入空格。

你可以這樣編:

#include

#include

void main()

visual c++編譯通過,希望能幫助你

21樓:匿名使用者

你的**出現問題的原因是scanf("%s",&a); ,a是一個char型別的變數,系統為它分配了一個位元組的記憶體空間,但是你卻輸入了一個字串到以a的地址為首地址的一段連續的記憶體空間裡,這樣就出現了越界錯誤.但是printf函式並不檢查越界錯誤,它會按正常的方法執行,然後程式統計出長度,列印出來結果.但是返回到呼叫main函式的作業系統後,系統會發現越界錯誤,所以在結果顯示出來後才出錯.

至於你說的輸入5個以下不會出錯,也許是偶然,也許跟你的編譯器有關.我用vs2005測試,只要輸入就會出錯。

如果你是隻想求出輸入的字串的長度而不要求儲存輸入的字串,下面的**更好。你的標準輸入緩衝區有多大,那麼它就可以求出多長的字串的長度,不會有越界。

#include

int main()

22樓:

#include

main() 這樣

23樓:在太平塔笨豬跳的三角楓

#include

main()

編譯通過.

c語言 計算字串長度

24樓:

作者你好!

首先要分清楚:字元陣列和字串的關係!

字串存放在陣列中,因此,一個字元陣列可以存放幾個串,單字串函式只認字串結束標誌'\0';

1. strlen(wer wer):字串為"wer_wer"這種字串常量,系統會在其後自動補上'\0';而求字串長度的函式strlen()只要遇見'\0';就返回函式值!

而且'\0'不算在其中!故返回值為7(空格也算一個字元!)

2. strlen(wer\0wer) 其中的字串為"wer\0wer"而strlen函式遇到'\0'即結束,故返回值為:3

3. '\0'不是空格,也不是回車!通過ascii碼錶,你可知道,'\0'是ascii碼值代表0(null);而空格的ascii碼為:

'\32' 32 回車的ascii碼值為'\13' 13

希望對你有所幫助!!!!

25樓:

c語言計算字串長度,可以手動計算也可以使用庫函式或者sizeof()操作符。

方法:自定義函式求長度

使用strlen()函式

使用sizeof()操作符

int cont_str(char *s)

strlen(str); //假設str為待求的字串陣列名

sizeof(str)/sizeof(str[0]); //假設str為待求的字串陣列名

strlen()函式求出的字串長度為有效長度,既不包含字串末尾結束符 『\0』;

sizeof()操作符求出的長度包含字串末尾的結束符 『\0』;

當在函式內部使用sizeof()求解由函式的形參傳入的字元陣列的長度時,得到的結果為指標的長度,既對應變數的位元組數,而不是字串的長度,此處一定要小心。

c語言程式設計符串長度,c語言程式設計 字串長度

include int strlen char stry 函式strlen 的呼叫在宣告後,這一行可以省略 int strlen char stry 應該傳入一個字元指標,也就是你的一維陣列首地址 因為呼叫時是n strlen str str是一維陣列名,也是陣列首地址 main include i...

c語言字串陣列的問題C語言字串陣列的問題

include int main scanf s a for i 0 a i 0 i for j 0 j 5 j 修改 1 下標從0 4,共5個 return 0 每行結尾的 僅僅是為了連線字串使用的,如果一個字串過長,寫在一行比較不合適,就在該行結尾處加上一個反斜槓 就可以在下邊的行繼續寫這個字串...

C語言字串出現亂碼,C語言 字串輸出時最後出現亂碼

第6行改為 char a 100 b 100 如果要輸出最終結果,沒必要每複製一個字元就輸出一次。將第25行刪掉。可以參考一下這個,講的很清楚 亂碼問題 codeblocks亂碼問題。它這個是codeblocks的,其他其實也差不 太多吧。關鍵是 原始檔儲存編碼 編譯器解釋原始檔的編碼 生成執行檔案...