當前位置:首頁 » 編程軟體 » c語言編譯器手機版輸出亂碼

c語言編譯器手機版輸出亂碼

發布時間: 2022-08-18 10:34:20

1. c語言輸出中文亂碼

提幾個建議。1)沒給出str的大小,不知道你定義的多大。至少str要保證120以上。考慮用2的倍數最優可以char
str[122]並且因為系統將自動在最後加'\0'。最好設定讀取121為好。以免讀取半個中文字。2)fgets的用法問題。
追加返回值的判斷為好。if(fgets(str,120,fp)!=null){
printf("%s\n",str);}3)關於出現亂碼的問題,估計你的文件中有中文漢字。讀取到119位的時候正好是某個漢字的前一半。要解決這個if(fgets(str,121,fp)!=null)
這里120
改成讀偶數個121。另外文件最好用寬字元的。就可以避免亂碼了。

2. 我的C語言程序運行後為什麼是亂碼

有幾個小問題:

  • 第一:c語言一般不支持中文,如果你用vc6.0++就是無法列印中文,一定會亂碼,建議用英文;

  • 第二:如果你用的c語言編譯器支持中文,如devc++,則可以使用中文;

  • 第三:我們的使用的字元格式,最多的是UTF-8,把默認代碼頁格式改為UTF-8試試吧

希望我的分享對你有用,感謝採納

3. c語言問題,輸出結果是亂碼

你在定義x結構體的同時,已經定義了一個x型的全局變數student1並賦了初值,然而,你的main函數里又定義了同名的局部變數student1並沒有賦初值。main函數執行時,這里的student1是未賦初值的,所以student1.name的值並不是"星哥",你以%s輸出它,自然會顯示為「亂碼」。

改正方法是,既然你已經定義了全局變數,main函數里就不要再定義了。

#include<stdio.h>
#include<string.h>

structx{
charname[10];
intage;
charaddress[10];
charsex[10];
}student1={"星哥",20,"天水","女"};

intmain(){
/*structxstudent1;注釋掉這一句就會是正常的*/
printf("%s ",student1.name);

return0;
}

運行結果

4. c語言代碼編譯通過,但輸出時有亂碼,什麼原因

修改如下:
//---------------------------------------------------------------------------
#include<stdio.h>
void main()
{
void secret(char str1[],char str2[]); /*注意這里*/
char str1[10],str2[10]={0}; /*注意這里*/
int i;
printf("please input something");
gets(str1);

secret(str1,str2); /*注意這里*/
puts(str2); /*注意這里*/

}
void secret(char str1[],char str2[]) /*注意這里*/
{ int i;
for(i=0;i<10&&(str1[i])!=0;i++)
{
if (str1[i]<='z'&&str1[i]>='a')
str2[i]='0';
else
if (str1[i]<='Z'&&str1[i]>='A')
str2[i]='1';
else
if (str1[i]<='9'&&str1[i]>='0')
str2[i]='2';
else
if (str1[i]==' ')
str2[i]='3';
else
str2[i]='4';

}
/*注意這里*/
}

//---------------------------------------------------------------------------

5. C語言 輸出顯示中文亂碼


for (i=0;i<strlen(save);i++)
改 為
for (i=0;i<strlen(save) -1 ;i++)
試下~

6. C語言控制台程序,中文輸出變成亂碼,怎麼解決

這里涉及到一個字元在源代碼(文本)中,編譯好的二進制文件中,以及最後控制台輸出編碼形式的區別.
首先,要明確一點:C(語言/程序)並不理解ANSI,UTF-8以及任何其他編碼.它只知道處理你給它的字元的二進製表示.
在簡體中文Windows下,默認的文本保存編碼是ANSI(即GBK);Linux下根據系統locale設定,一般應該是(zh_CN.UTF-8).(以下基於簡體中文Windows)
1)對於源文件中保存的"中文"這個字元串,VS2008看到的就是"0xd6d0"和"0xcec4"的形式(默認ANSI編碼得到).但編譯器才不管是不是GBK神馬的,它就管那串數字.
區別,MinGW看到的是"0xe4b8ad"和"0xe69687"(gcc默認UTF-8).注意,用MinGW編譯的源文件中有中文寬字元必須保存為UTF-8編碼.
2)然後,在二進制文件中的存儲形式,對傳統的字元串(char str[] = "中文";),編譯器什麼都不做,直接把那串數字(如"0xd6d0","0xcec4")搬過去塞進二進制文件.
但對於寬字元串(wchar_t wstr[] = L"中文";),編譯器會將其做轉換,轉換成Unicode編碼格式(在Windows是UTF-16,而Linux下是UTF-32).如"中文"的16位Unicode是"0x4e2d"和"0x6587",然後把這串轉換後的數字("0x4e2d","0x6587")塞進二進制文件中.(這里VS和MinGW做的沒有區別)
這里有點需要注意,編譯器必須知道你的源文件保存的編碼!如VS默認是ANSI編碼,如果你用UTF-8保存.c源文件去用VS打開看一定是亂碼.同理如果你用mingw編譯ANSI編碼保存的源文件,也會出錯!(但可以修改編譯選項解決,見文章末尾) 在本文這里這個原因其實很好理解,因為編譯器需要知道,如果它要將一個保存在文件中的字元轉成寬字元時,是從什麼編碼轉到Unicode.(可見上述VS是GBK->Unicode,而MinGW是UTF-8->Unicode)

7. c語言輸出字元串數組出現亂碼

C語言字元串以'\0'結尾,如果不以該符號結尾則輸出%s時會出錯,程序一直往存放字元串的地址訪問。而你的程序中並沒有賦'\0'給那兩個數組,所以會出現亂碼。
沒有出現亂碼的數組是因為你初始化了,初始化時編譯器會給它加上'\0'符號。

8. 為什麼C語言輸出文件內容亂碼

這種文本文件,不能直接使用讀到結構的方法。因為結構里會有非文本的控制符,比如字元串結束符'\0'。
一般使用直接讀到結構的方法,只限於二進制格式的文件,並且最好是讀自己創建的文件,別人創建的,格式剛剛好合適創建結構的也很少。
你這個亂碼,你的文件里,學號長度為10個位元組,所以你定義學號這個變數時,必須定義11個位元組的長度,因為字元串的變數,必須要有一個'\0'作為結束,不然的話,顯示的時候,沒有結束符就會接著往下顯示,就會有亂碼出現。
如果僅僅是這三行的話,倒也能使用結構來讀,比如結構里定義num[11],讀完後執行一下num[10] = '\0';給它補一個結束符。但如果有人叫「王老四」,名字有的是2個字,有的是3個字這樣,你這個就不好判斷了。
這種文本,最好是使用fscanf("%s %s %s %s %s", num, name, sex, date, major)的形式來讀取。每次讀取一行。(注意字元串定義變數時,長度一定要多加1位)。

9. C語言編程出現漢字輸出亂碼現象

C語言中一個漢字是由兩個位元組來表示的
而C語言編程主要是以位元組為單位來顯示
所以你的C語言輸出中,如果漢字顯示只顯示了一個位元組,就會有亂碼出現了
正常的做法是,你的printf輸出時,符號的長度要為偶數位元組。

10. c語言編譯運行亂碼是什麼原因

這種情況多數是由於操作系統的語言選項不正確引起的。建議你查看一下控制面板中的區域和語言選項,特別是有關「非Unicode程序的語言」,一定要選擇成「中文(簡體,中國)」。然後重啟電腦。

熱點內容
javatoolsfor 發布:2024-03-29 18:17:55 瀏覽:899
linuxi2c驅動 發布:2024-03-29 18:09:56 瀏覽:671
junit源碼下載 發布:2024-03-29 18:00:10 瀏覽:525
本田雅閣壓縮機不工作 發布:2024-03-29 17:59:13 瀏覽:600
溯源碼可以偽造嗎 發布:2024-03-29 17:54:45 瀏覽:56
北京編程傳 發布:2024-03-29 17:54:44 瀏覽:435
編程畫曲線 發布:2024-03-29 17:48:59 瀏覽:59
簡單存儲服務s3 發布:2024-03-29 17:48:46 瀏覽:336
安卓手機的usb功能在哪裡設置 發布:2024-03-29 17:46:27 瀏覽:758
配置文件ini如何寫 發布:2024-03-29 17:31:05 瀏覽:997