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的,其他其實也差不 太多吧。關鍵是 原始檔儲存編碼 編譯器解釋原始檔的編碼 生成執行檔案...