c語言問題如果字串陣列含有多個0那要怎么

時間 2022-10-21 22:20:05

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 全域性變數,或者全域性變數空間...