c語言怎麼判斷字串裡面有亂碼 除了漢字,字母,數字 其他的都是亂碼

2021-03-29 10:05:15 字數 2933 閱讀 3299

1樓:匿名使用者

亂碼不太好判斷, 因為是以眼睛看到為判斷標準的:

你不認識的串是亂碼,那程式就不好判斷了,

因為 亂碼也是合法的字元,你不認識而已。

現在的字符集常見有兩種: gbk與unicode,都是超大字符集,亂碼的字元往往也是合法字元,gbk最難判斷,而unicode有非法碼區,我一人之見,供參考。

2樓:匿名使用者

漢字gbk編碼 採用雙位元組表示,總體編碼範圍為 8140-fefe,首位元組在 81-fe 之間,尾位元組在 40-fe 之間,剔除 xx7f 一條線。總計 23940 個碼位,共收入 21886 個漢字和圖形符號,其中漢字(包括部首和構件)21003 個,圖形符號 883 個。

全部編碼分為三大部分:漢字區,圖形符號區,使用者自定義區

1. 漢字區。包括:

a. gb 2312 漢字區。即 gbk/2: b0a1-f7fe。收錄 gb 2312 漢字 6763 個,按原順序排列。

b. gb 13000.1 擴充漢字區。包括:

(1) gbk/3: 8140-a0fe。收錄 gb 13000.1 中的 cjk 漢字 6080 個。

(2) gbk/4: aa40-fea0。收錄 cjk 漢字和增補的漢字 8160 個。

cjk 漢字在前,按 ucs **大小排列;增補的漢字(包括部首和構件)在後,按《康熙字典》的頁碼/字位排列。

所以在判斷漢字時,要採用兩個位元組同時檢查才可以。

以下程式供參考

#include

int main()

else

else}}

}printf("第%d位是亂碼\n" , i+1 );

i++ ;

}return 0;}

c語言,字串輸出是亂碼

3樓:

#include

#include

#include

int random(int num);

void main()

printf("請依次輸入學生姓名:");

for(i=0;i被點到的同學的名字是:");

printf("%s ",p[random(n-1)]);

}int random(int num)

4樓:匿名使用者

你好沒有亂碼

就是邏輯上有些錯誤如圖:

5樓:匿名使用者

按照程式是在a字元

串中隔乙個字元取乙個形成b字串

void main()

half(a);

}輸出24680bdfhj

如果出亂碼,可能你的a陣列賦值方面有問題,不知道你是如何定義a陣列和呼叫函式的

6樓:匿名使用者

輸出亂碼是必須的,

因為你的資料型別搞錯了,

你使用的是字元函式stringcopy()來拷貝字元;

那麼要處理的資料當是char型別,

然而你所定義的指標應當也是char型別;

你應當修改的地方是

int *str1,*str2;//請將int改為char

7樓:匿名使用者

沒什麼問題,第乙個for迴圈後多了乙個分號;只要保證你傳入該函式的陣列a中有準確的二十個字元就行,如:char a=;

8樓:

while(1)

else }

9樓:匿名使用者

把讀迴圈改為 : while(fgets(str,120,fp) != null) printf("%s\n",str);

這樣就不需要直接檢查檔案是否結束,這是因為fgets()函式在讀滿120個字元或遇到'\n'時,就返回str的首址。在讀檔案時,測試是否到檔案結束經常出錯,我看見高手們都很少使用feof();函式,原因大概在此吧!

10樓:匿名使用者

原因向他們說的那樣, char a是乙個區域性變數, 函式返回後他在棧上的空間就自動釋放了...

可以這樣改下:

#include

#include

#include

#include

using namespace std;

#define max_len 10

char* getnick()

return a;

}void main()

11樓:匿名使用者

getnick函式內的陣列a是區域性陣列,在棧上分配空間``,當getnick執行完後,棧空間會被**

可把a定義為全域性變數或動態申請空間(在堆中分配空間)

12樓:匿名使用者

getnick 返回的a,是乙個區域性變數,當getnick返回後,這個變數就無效了,這個變數所指記憶體中的內容變得不可**,列印出來的當然不行了。你要麼把 a 宣告在函式外面,作乙個全域性變數,要麼在getnick裡

static char a = ....;

13樓:匿名使用者

你的 str2 沒有加結束字元

加上 str2[n] = '\0';

就能濾掉後面的亂碼了

14樓:匿名使用者

if( !(file = fopen(name, "wb")))

你是以二進位制的方式開啟檔案的,用「w+」吧: fopen(name, "w+")

15樓:匿名使用者

#include

int main()

str2[n]='\0';

}puts(str2);

putchar('\n');

return 0;

}就是 str2 的結束加上結束符『\0』

用c語言怎麼判斷字串是否為空用C語言怎麼判斷乙個字串是否為空?

空格和字串為空的概念本來就不一樣,如樓上所說空格本來就代表一 專個字元屬,而空字串直接為 0 如果你要把空格的字串也定義為空字串的話就要加判斷 空格的ascii碼為32 你只需要再多加乙個遍歷判斷就ok int isempty 0 int length strlen 變數 int n 遍歷整個字串,...

c語言字串程式設計問題

include int main for i 0 i a data i z data i a data i z continue for j i 1 j a data j z data j a data j z if itemp i else break for i itemp i 0 data i...

c語言字串中的空格算不算字元,C語言字串中的空格算不算乙個字元

baic語言規定,字串是用雙引號括 du起來的字串行zhi。由於空dao格也在字串中 在雙引號內 所以空格也算乙個字元。可以通過下面的程式段來驗證空格算不算乙個字元 char a abc efg printf d sizeof a 輸出8,6個字元 1個空格 1個字元結束標誌,sizeof函式是測試...