亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

我指的“系統”是VC,在Turbo C下運行char p[]={'a','b','c'}就沒問題??!

我指的“系統”是VC,在Turbo C下運行char p[]={'a','b','c'}就沒問題?。?/h1>
C C++
泛舟湖上清波郎朗 2023-03-15 17:13:54
#include"stdio.h"#include"string.h"  void main() { char c[]={'a','b','c'};printf("%d\n",strlen(c));}怎么輸出是7啊,加將c[]換成c[7]或者加上'\0'又對了,strlen函數是遇到'\0'終止,但是c[7]={'a','b','c'};同樣沒有'/0',但是求長是正確的,我記得系統會默認加上'\0'的,例如c[7]={'a','b','c'};系統實際上存的是'a','b','c','\0','\0','\0','\0'。高手幫忙看下為什么strlen求錯了,這種問題該怎么避免?最佳答案:問題出在:char p[]={'a','b','c'},p[]你沒指定長度,系統就不知道,默認也為無限長(可以驗證:你輸入p[16]都還可以看到有輸出,因為你沒指定p[16],所以這個輸出是系統隨機給的),這時你調用strlen函數來求“長度未知”的字符串,strlen“很聰明”,它就會給你輸出一個奇怪的7(但不一定只是7,你換個其他長度的字符串它又可能輸出其他數了)而且:char p[]這種形式下系統是不會在結尾默認加上'\0'的!。只有在指定長度char p[5]={'a','b','c'}或者字符串形式char p[]="abc"的情況下系統才會在末尾默認加上'\0',這時就不會出錯。
查看完整描述

3 回答

?
烙印99

TA貢獻1829條經驗 獲得超13個贊

如果您的空白內存單元比較多的話,那么在數組最后一個元素'c’之后可能是'\0',那么正好結束strlen函數,而輸出3,我剛把您的代碼復制過去,運行了下是3,以前我也不明白為什么,有的時候正確,有的時候錯誤,原因就是沒有在數組即字符串末尾加'\0',所以賦值最好用字符串,即方便,系統又會自動加結束符,希望能夠幫到您。

查看完整回答
反對 回復 2023-03-18
?
largeQ

TA貢獻2039條經驗 獲得超8個贊

輸出結果是不確定的,因為你的char數組不存在末尾的'\0'
正確的初始化方式應該是:char c[] = "abc"; 

補充:
只有字符串形式的初始化,編譯器才會幫你在某位補零
你用的那種方式,得到數組長度就是3,哪里來有位置補零呢?

查看完整回答
反對 回復 2023-03-18
?
慕的地8271018

TA貢獻1796條經驗 獲得超4個贊

char c[]={'a','b','c'} ; 等價于 cha c[2]="ab";c[2]='c';
而不是 char c[] = "abc"; 這就是區別, 不知你能不能看得懂

查看完整回答
反對 回復 2023-03-18
  • 3 回答
  • 0 關注
  • 135 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

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

公眾號

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