1樓:累了淚了
字串中不應該'\0'的,這個在字串中是作為字串結束標誌存在的
c語言,字元陣列中最後乙個字必須為『\0』,為什麼錯?
2樓:英雄no無敵
不是字元陣列中最後乙個字元必須為'\0',如果字元陣列中存放的是乙個字串,則最後乙個字元應當'\0','\0'是結束符號,這樣當輸出這個字串時,只須輸入陣列名就可以,輸出函式會自動輸出陣列中的字元,直到遇到'\0'為止,否則你就要利用迴圈自己將字元乙個乙個的輸出,而且還要判斷該字元是不是所需要的字元,明白了麼?
3樓:
'\0'是為了關閉字串,如果不關閉,那麼就要爆掉!
所以開陣列時要開大!
請教c語言字串和字元陣列的比較問題
4樓:yuanyuan源遠
利用fgets()取得乙個字串,直到讀取到"回車"符,而你得到的字串中含有「回車」(ascii:10),比你要比較的字串多乙個「回車」,所以strcmp()比較結果一直不為零。
如第一次while迴圈的結果:
5樓:it孤鶩
#include
#include
#include
int main(void)
fclose(fp);
system("pause");
return 0;
}上面的**更靠譜
你用過用fgets 那麼處理的字串後面一直要加'\0'
6樓:匿名使用者
fgets()到buff後,沒有\0結束標記
7樓:餘煙琦釵
c語言的字元陣列有兩種,比較方式也有所不同。
1字串。
c語言的字串是用字元陣列表示的。約定以'\0'(ascii碼0)作為結尾標記。
對於字串類的字元陣列,可以用string.h中的strcmp函式進行比較。
intstrcmp(char
*str1,
char
*str2);
其比較規則為:
a,從左向右依次比較每個元素;
b,如果出現str1的元素ascii碼比較大,則返回1;如果出現str2元素ascii碼比較大,則返回-1。如果相等,則繼續。
c,如果一直相等,直到遇到\0,這時檢查是否均為\0,如果均為\0,那麼返回0;
d,如果str1到\0,而str2沒到,返回-1;
否則返回1。
總結規則就是,如果str1比str2大,返回1;如果相等,返回0;如果str1小,返回-1。
2不帶\0結束的字元陣列。
對於此類陣列,沒有庫函式可供使用,只能自己寫函式進行比較。規則可以仿照strcmp的規則。
由於沒有\0作為結束,所以引數中必須傳入每個陣列的元素個數。
int char_array_cmp(char *s1, int l1, char *s2, int l2)
c語言中如何宣告儲存多個字串的陣列?
8樓:
實現思路:使用std自帶的string類進行儲存字串的操作。
例如使用如下**:
#include
using namespace std;
string a[233];
int main()
#include這個標頭檔案包含以下等等c++中包含的所有標頭檔案:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include 等等……
string型別定義在string標頭檔案中,包含即可。
9樓:匿名使用者
那就是二位陣列,每一行表示乙個字串
char s[5][10];
表示s是可以存放5行容量為10個字元的字串的二維陣列gets(s[i]);即可
c語言怎麼定義多個陣列儲存字串,又要求逐個輸入?
10樓:幻翼高達
需要準備的材料分別有:電腦、c語言編譯器。
1、首先,開啟c語言編譯器,新建乙個初始.cpp檔案,例如:test.cpp。
2、在test.cpp檔案中,輸入c語言**:
char a[10][100];
for (int i = 0; i < 10; i++) {gets(a[i]);
3、編譯器執行test.cpp檔案,此時成功定義了10個字串的陣列,並逐個進行了輸入。
11樓:風若遠去何人留
可以定義乙個字元型二維陣列,並依次輸入。
比如輸入10個字串,每個字串最大長度不超過100,那麼**可以寫作:
char str[10][100];
int i;
for(i = 0; i < 10; i ++)scanf("%s", str[i]);//逐個輸入。
for(i = 0; i < 10; i ++)printf("%s\n", str[i]);//將輸入的字串依次輸出以確認結果。
12樓:好人
#include *****
void main()
多維類同。
c語言中怎麼查詢字串陣列中的某個字元?
13樓:匿名使用者
程式有誤,修改如下:
#include
#include
void main(){
char sh[20];
gets(sh);
for(int i=0;i<20;i++)if(sh[i]='@')
printf("判斷出有字元@\n");
break;
if(sh[i]='\0')printf("無字元@\n");
14樓:匿名使用者
c語言中的標準函式庫中的strchr()函式可以實現查詢字串中的某個字元。
標頭檔案: #include
函式原型:char *strchr(const char *s, int c);
函式說明:從左向右,在字串s中查詢字元c首次出現的位置,如果找到返回c在s中的位置(指標),否則返回null
例:#include
#include
void main()
char *strrchr(const char *s, int c); 從右向左,查詢s中最右邊的匹配字元位置
char *strstr(const char *s, const char *sub); //在s中查詢sub子串出現的位置
15樓:江華
不能用break吧,用break語句時,輸入的第乙個字母不是@符號時,程式就跳出去了,不會再執行for迴圈語句,建議你刪除break語句或者將break語句換成continue語句試試。
16樓:匿名使用者
char sh[20];
gets(sh);//這一句只要求使用者輸入乙個字元。因此,不管你輸入多少,程式只會讀到你輸入的第乙個字元。
如果想輸入多個字元,得用迴圈。
17樓:匿名使用者
程式沒有找到字元的時候,你就break,退出迴圈了。把這一句去掉就可以了。
修改如下 :
#include
#include
void main()
else }}
c語言關於陣列中0和『\0』的儲存問題
18樓:滄海雄風
只能占用4 個 第五個要留給\0
a[4] = 0; 和 a[4] = '\0'; 這倆一樣 \0 ascii 碼 0
a[4]='0' 這樣的 0才是ascii碼48 不要被那些人誤導
19樓:
首先乙個字串的話末尾是必須要有\0的 ,否則會越界,這樣的後果就是程式會有bug,
如果你的陣列有5個空間的話,最後乙個一定要留給\0至於a[4] = 0; 和 a[4] = '\0' 當然是有區別的,要不叫一樣的名字不就完了嗎
0跟\0在的ascii碼是不一樣的 所以代表的也就不一樣啦但是如果要是強轉了\0程式設計整形 他就跟0是一樣的 相反也是一樣的,希望對你有幫助,請採納
20樓:匿名使用者
有兩個概念:
1 如果你不把 a 當字串操作,為什麼硬要加個『\0'?不用這麼硬性。
2 如果你要把a當字串,一定要留出乙個字元做'\0';
否則你用a呼叫任何操作字串的函式(例如:strcpy,strcat等),程式直接崩潰的可能很大。
0和'\0'不一樣。
0是字元0,用ascii表示是48。
'\0'就是ascii的0.絕對的0。呵呵,在記憶體中就是按位看是全0的存在。
21樓:哈薩就是
存在a[4]裡面,即最後乙個元素裡
a[4]不能占用,不然後面會接亂碼
0和'\0'有區別:乙個在ascii中為48,乙個為0就像乙個0度乙個絕對零度
22樓:匿名使用者
你只管用夠5個就可以了,陣列的結束標誌\0 和a[4]沒關係。
a[i]=0 等同 a[i]='\0'
a[i]='0' 等於 a[i]=chr("48")a[i]=0 等於a[i]=chr("0")
c語言 字元陣列 \0
23樓:志遠
首先,你的while(p++)會陷入死迴圈。因為p++返回的值是位址,0x0000++後是0x0001,以此類推,非0永遠為真!
如果希望以指標的內容來判斷,應該寫作while(*p++), *的優先順序高於++,所以先讀取指標指向的變數值(做判斷),然後指標指向下乙個變數。
但很遺憾,非字串陣列,這樣寫非常危險
字串陣列比較特殊,因為acsii碼裡,0是空字元,是專有的結束符標誌。你乙個整形的陣列能保證元素不是0嗎?s[4]後面如果第五元素是0,while就停止了,但後面極可能是隨機數(野指標),所以while(*p++)極可能也是死迴圈。
所以建議用for+長度遍歷這樣比較安全。
補充乙個結論:
字串陣列可以不用傳遞陣列長度,因為可以用0判斷是否到達了最後一位
非字串陣列應在傳參的時候傳遞陣列長度,因為你沒法保證你的陣列元素不為0
祝你好運
24樓:倒霉熊
一般情況下,宣告字元陣列時,其長度比其元素個數多乙個,s[4] =;這樣並不好,這樣編譯環境不新增 '\0'結束符的,這樣寫
s = ;這樣才補\0。
另外 while(*p++),而不是p++。
這樣,開始解答你的問題:
不是到 s[3]停止,而是到,用陣列表示,可以說到 s[4]停止,也就是補充的\0的位置,while迴圈結束的條件就是 *p =='\0'.
這裡不能說越界,因為,c分配空間的時候,多分配了乙個,在需要補充\0的時候。
25樓:陳宗權
while(p++)是判斷p表示的位址是否為零,與那個位址的記憶體中的數值無關。
如果你希望根據記憶體中的數值來判斷,應該用while(*p++),因為p=s,這會從s[0]開始逐個向後檢查直到遇到數值為0的元素('\0')為止。就你給的資料而言,s陣列中沒有'\0',必然導致p在越過陣列邊界之後繼續向後走直到在未知的某處遇到'\0'為止,也就是越界訪問。
26樓:匿名使用者
遇到'\0'馬上停止,不會去管他後面是什麼,就算後面是合法的,也不會讀取了!
27樓:匿名使用者
指標會一直移動下去,直到遇到位址為空為止。
c語言字串陣列和字元陣列有什麼區別
芒素蘭勵鳥 這個是字元陣列,沒有字串陣列這種說法的。char a abcd 就是可以用字串給字元陣列初始化 僑有福泥月 這個是字元陣列。c語言字元陣列和字串的區別,字元陣列是一個儲存字元的陣列,而字串是一個用雙括號括起來的以 0 結束的字元序列,雖然字串是儲存在字元陣列中的,但是一定要注意字串的結束...
C語言關於字串問題
include include void main 在s3字串中形成最後輸出結果 先將s1串中的s1 0 到s1 max 寫入s3串中 再將s2串中的所有字元繼續寫入s3串中 最後將s1串中s1 max 之後的內容繼續寫入到s3串中。for i 0 i t1 t2 i for i 0 i inclu...
c語言怎麼返回字串陣列,C語言中怎麼查詢字串陣列中的某個字元?
風若遠去何人留 c語言返回值不支援返回陣列,不過可以通過返回指標型別,用以替代陣列。在c語言中,陣列大多數時候是可以用指標替代的。不過需要注意的是,不能夠返回在函式內部定義的區域性變數陣列,因為一旦函式退出,區域性變數就會被釋放,導致陣列指標無效。可以返回以下幾種 1 全域性變數,或者全域性變數空間...