最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

編輯器寫(xiě)C語(yǔ)言輸出中文亂碼問(wèn)題及解決

 更新時(shí)間:2023年09月08日 16:55:18   作者:是嚴(yán)寒呀  
這篇文章主要介紹了編輯器寫(xiě)C語(yǔ)言輸出中文亂碼問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

編輯器寫(xiě)C語(yǔ)言輸出中文亂碼

在寫(xiě)C語(yǔ)言時(shí),有時(shí)候需要使用printf輸出中文,如果使用IDE來(lái)寫(xiě)代碼,例如使用VisualStudio,輸出中文沒(méi)有問(wèn)題。

但是當(dāng)使用編輯器+編譯器的方式寫(xiě)代碼,在這個(gè)環(huán)境下輸出中文可能會(huì)遇到中文輸出亂碼。

環(huán)境

  • 編輯器:VSCode
  • 編譯器:Mingw-w64

C語(yǔ)言代碼:

#include <stdio.h>
int main() 
{
    char a[2048];
    FILE *fp;
    if ((fp = fopen("test.txt", "r+")) == NULL) {
        printf("無(wú)法打開(kāi)\n");
        return 0;
    }
    fscanf(fp, "%s", &a);
    printf("a的值:%s\n", a); 
    fclose(fp);
    return 0;
}

代碼說(shuō)明:上述代碼的主要作用是讀取文件的內(nèi)容,并將讀取內(nèi)容輸出在屏幕上

文件內(nèi)容:

說(shuō)明:test.txt 文件是通過(guò)右鍵新建文本文檔建立的。

過(guò)程

1.編譯:使用gcc main.c -o main,生成可執(zhí)行文件main.exe

2.運(yùn)行:輸入main.exe 運(yùn)行程序 (注:test.txt和C源文件在同一個(gè)文件夾下)

分析原因:

這時(shí)候輸出中文異常,但是讀取的內(nèi)容沒(méi)有問(wèn)題。

這里關(guān)注兩個(gè):一是為什么"printf("a的值:%s\n", a)"這句代碼中的漢字在輸出時(shí)亂碼,二是同樣漢字,讀取的內(nèi)容沒(méi)有問(wèn)題。

第一個(gè)問(wèn)題是因?yàn)榫幋a不一致,也就是文件的編碼和系統(tǒng)終端(也就是cmd)的默認(rèn)編碼是不一樣的,中文系統(tǒng)里cmd的默認(rèn)編碼是GBK,而在VSCode中文件的編碼是UTF-8。當(dāng)這兩個(gè)編碼不一樣時(shí),會(huì)出現(xiàn)中文亂碼,準(zhǔn)確說(shuō)是異常。

圖:VSCode的文件默認(rèn)編碼是UTF-8

第二個(gè)問(wèn)題為什么讀取內(nèi)容沒(méi)問(wèn)題呢,這是因?yàn)閃indows文本文檔的默認(rèn)編碼是ANSI(在中文系統(tǒng)里即GBK)(ANSI和ASCII的關(guān)系:簡(jiǎn)單說(shuō)就是ANSI是對(duì)ASCII的擴(kuò)展,兼容ASCII),cmd默認(rèn)輸出編碼是ASCII(即GBK),所以讀取了文件內(nèi)容再將內(nèi)容輸出到cmd終端沒(méi)有問(wèn)題。

圖:通過(guò)文件-另存為 可以查看到這個(gè)文件的編碼方式,默認(rèn)為ANSI

測(cè)試

知道后,可以做個(gè)測(cè)試,將test文件的編碼改為UTF-8,然后再讀取輸出,如果沒(méi)有錯(cuò),這時(shí)候應(yīng)該輸出異常。

1.保存為UTF-8

2.運(yùn)行下程序

和預(yù)想結(jié)果一樣

拓展

這里使用另一個(gè)輕量IDE:Dev-C++

當(dāng)把main.c用dev打開(kāi)時(shí),出現(xiàn)亂碼:

這個(gè)亂碼和上面終端輸出“a的值”的亂碼一樣

做個(gè)測(cè)試,使用dev新建文件,復(fù)制代碼進(jìn)去

編譯運(yùn)行結(jié)果:

我們?cè)赿ev的終端里"a的值"輸出沒(méi)有問(wèn)題,后面的內(nèi)容異常,這是因?yàn)榍懊姘裻est文件改為了UTF-8。

這里就要問(wèn)一個(gè)問(wèn)題dev的代碼文件難道和cmd的編碼格式一樣?

可以使用notepad++查看文件編碼:

這個(gè)demo.cpp是在dev里創(chuàng)建,編碼是GB2312

前面用dev打開(kāi)VSCode創(chuàng)建的main.c出現(xiàn)亂碼,說(shuō)明dev是以GB2312的編碼方式打開(kāi)文件的,也是以GB2312保存文件的,而GB2312編碼在cmd里以GBK編碼輸出中文是沒(méi)有問(wèn)題的。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • c++ 盡量不要使用#define 而是用const、enum、inline替換。

    c++ 盡量不要使用#define 而是用const、enum、inline替換。

    為什么這么說(shuō)呢?或許很多程序員已經(jīng)習(xí)慣在文件開(kāi)始使用大量的#define語(yǔ)句
    2013-01-01
  • 一文詳解C++中的引用與關(guān)鍵字auto

    一文詳解C++中的引用與關(guān)鍵字auto

    引用就是給一個(gè)已經(jīng)存在的變量取一個(gè)別名,與變量共用一段內(nèi)存空間。關(guān)鍵字auto一般可以用來(lái)自動(dòng)識(shí)別類(lèi)型,本文主要來(lái)講講二者的相關(guān)知識(shí),需要的可以參考一下
    2023-04-04
  • C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)鏈表隊(duì)列的實(shí)現(xiàn)

    C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)鏈表隊(duì)列的實(shí)現(xiàn)

    這篇文章主要介紹了C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)鏈表隊(duì)列的實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • 詳解C語(yǔ)言printf()輸出格式

    詳解C語(yǔ)言printf()輸出格式

    這篇文章主要介紹了C語(yǔ)言printf()輸出格式,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03
  • 一盤(pán)王者的時(shí)間用C語(yǔ)言實(shí)現(xiàn)三子棋

    一盤(pán)王者的時(shí)間用C語(yǔ)言實(shí)現(xiàn)三子棋

    相信我們都玩過(guò)三子棋,規(guī)則很簡(jiǎn)單,但想用c語(yǔ)言做出這個(gè)游戲,事實(shí)上也是比較簡(jiǎn)單的,下面通過(guò)c語(yǔ)言進(jìn)行對(duì)五子棋的分析
    2022-02-02
  • C++如何去掉字符串首尾的空格

    C++如何去掉字符串首尾的空格

    這篇文章主要介紹了C++如何去掉字符串首尾的空格問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • C語(yǔ)言動(dòng)態(tài)內(nèi)存管理malloc柔性數(shù)組示例詳解

    C語(yǔ)言動(dòng)態(tài)內(nèi)存管理malloc柔性數(shù)組示例詳解

    這篇文章主要為大家介紹了C語(yǔ)言動(dòng)態(tài)內(nèi)存管理malloc柔性數(shù)組示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • STL常用容器詳細(xì)解析

    STL常用容器詳細(xì)解析

    這里我們不涉及容器的基本操作之類(lèi),只是要討論一下各個(gè)容器其各自的特點(diǎn)STL中的常用容器包括:順序性容器(vector、deque、list)、關(guān)聯(lián)容器(map、set)、容器適配器(queue、stac)
    2013-09-09
  • 深入了解C語(yǔ)言字符函數(shù)和字符串函數(shù)

    深入了解C語(yǔ)言字符函數(shù)和字符串函數(shù)

    這篇文章主要給大家介紹了關(guān)于C語(yǔ)言字符/字符串的相關(guān)函數(shù),文中通過(guò)示例代碼總結(jié)的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C語(yǔ)言具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • C++使用棧實(shí)現(xiàn)括號(hào)匹配的代碼詳解

    C++使用棧實(shí)現(xiàn)括號(hào)匹配的代碼詳解

    在編程中,括號(hào)匹配是一個(gè)常見(jiàn)問(wèn)題,尤其是在處理數(shù)學(xué)表達(dá)式、編譯器解析等任務(wù)時(shí),棧是一種非常適合處理此類(lèi)問(wèn)題的數(shù)據(jù)結(jié)構(gòu),能夠精確地管理括號(hào)的匹配問(wèn)題,本文將通過(guò) C++ 代碼,詳細(xì)講解如何使用棧來(lái)實(shí)現(xiàn)括號(hào)匹配,需要的朋友可以參考下
    2025-02-02

最新評(píng)論

崇文区| 札达县| 广宗县| 苍南县| 达孜县| 罗江县| 尚志市| 大兴区| 虞城县| 盐源县| 德安县| 凉山| 右玉县| 吴忠市| 桐城市| 灵石县| 翁源县| 辛集市| 凌海市| 沙河市| 罗平县| 泾川县| 区。| 克拉玛依市| 民勤县| 阳城县| 资源县| 获嘉县| 辽宁省| 绿春县| 牙克石市| 衡水市| 札达县| 揭东县| 辉县市| 道真| 文登市| 九江县| 依安县| 渝北区| 上饶市|