1樓:匿名使用者
程式記憶體產生了越界訪問。
區域性變數c、a都是存放在堆疊中的,堆疊是向下增長的,先定義的變數在堆疊中較高的位址。
char c=abc";這樣定義的話c[0]='a',c[1]=[b],c[2]='c',c[3]='0';因為字串是以'\0'結尾的。
而char a=定義的是字元陣列,不是字串,結尾沒有'\0';
假如堆疊中c 的位址是0x40101004,那麼a的位址是0x40101000,而不是40101001,雖然a中只有3個字元,只佔3個位元組。但是我們cpu的暫存器是32位,也就是4個位元組,位元組對齊,記憶體的訪問速度更快。所以那麼a的位址是0x40101000,因此記憶體中的資料是這樣的:
0x40101000 'a' 變數a位址。
0x40101001 'b'
0x40101002 'c'
0x40101003 資料未知。
0x40101004 'a' 變數c位址。
0x40101005 'b'
0x40101006 'c'
0x40101007 '\0'
strlen函式是通過判斷'\0'字元的位置來決定字串的大小的,除非0x40101003的字元是'\0',由於0x40101003資料沒有被初始化,而0x40101003的字元是'\0'的概率是是非常小的,因而a的長度是7
2樓:網友
char a=
strlen(a) 這樣使用是錯誤的。7只是乙個隨機數,看你記憶體什麼地方遇到'\0'符號而已。
你的char a=結束時應該加乙個 '\0'這樣strlen才能正確返回。
3樓:網友
char a=
這種寫法一般是不能這樣寫的。字串判斷結束時用'\0'來判斷的。如果你一定要用這種寫法的話,就需要這樣寫 char a=如果你不加\0,那麼a字串的長度結束位置不一定是在字母c後面。
你可以試著將你上面**定義的a,c字串顯示出來,你就知道a的字元不是abc,而是別的什麼值了。
4樓:匿名使用者
char c=abc" 在c[3]處會自動補上(隱式)'\0';
但char a=這種寫法必須顯式補上'\0',否則a這個串就沒有明確終止符,而strlen只有遇到'\0'才結束長度計算;
這個問題是乙個很常見的程式設計錯誤:)
5樓:
不一定是7,隨機數的,可以改成。
#include ""
void main()
printf("%d %d",strlen(c),strlen(a));就好了。
6樓:匿名使用者
char a=
是否與char a=
這樣再加上最後的\0不就是7位。
不過我用code::blocks試過它為6不懂!呵呵!
7樓:匿名使用者
乙個字元兩個位元組,加「\0」共7個。
8樓:匿名使用者
字串是以\0結尾的,a字串沒有結束標誌,其實他的長度是不定的,7 並不是它的長度b
不信你試試這樣。
#include ""
#include
main();
printf("%d,%d",strlen(c),strlen(a));
C語言求助,C語言問題,求助
寫的話挺費時間的,這個不難.c語言問題,求助 這題是迷惑人用的 因為迴圈內部沒有break,所以for會一直執行下去,直到a 11,這時a大於10,迴圈結束。最終a的值為11 for a 0 a 10 a 直到a 11時,迴圈結束。迴圈體對a的值沒有影響,包括continue對迴圈沒有影響。所以,最...
c語言程式設計問題求助急,C語言程式設計問題求助 急!
暄和 include void main int num printf input m scanf d num if isperfect num printf d is a perfect number.n num else printf d is not a perfect number.n nu...
C語言問題,C語言問題
1答案應該是b,這個沒什麼好解釋的 就是指標變數指向變數的位址 2 答案應該是d 如果直接用字串對字元陣列初始化的話字元陣列的長度要比實際字串長度大1的 因為字串在字元陣列中是以 0 結束的,這個你也可以用sizeof 分別測試一下 我已經測試過了a比b大1的 3 答案應該是d,這個沒的說,括號的作...
c語言求助關於鍊錶刪除的問題,c語言 求助乙個關於鍊錶刪除的問題
這個出錯點在行 while 迴圈之後的那一句 free l tail 第一段程式,其實在 while 迴圈裡面已經把全部節點都釋放了,包括尾節點,所以第一段程式不需要再釋放一次 l tail,只需要保留 l tail null 即可。第二段程式,因為最後乙個節點的 next 是 null,while...
c語言程式設計基礎問題,c語言程式設計求助
下面哪些是不合法的字元型常量 1.65 2.b 3.ab 不合法,只能乙個字元4 n 5 075 6 078 不合法,8進製沒有數符8。7 8 xaf 下面哪些是不合法的浮點數常量 1 12e7 2 12e7.2 不合法,指數部分必須是整數3 0.0 4 1e 10 5 105 6 0e0 7 6....