亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

編輯器寫C語言輸出中文亂碼問題及解決

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

編輯器寫C語言輸出中文亂碼

在寫C語言時,有時候需要使用printf輸出中文,如果使用IDE來寫代碼,例如使用VisualStudio,輸出中文沒有問題。

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

環(huán)境

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

C語言代碼:

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

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

文件內(nèi)容:

說明:test.txt 文件是通過右鍵新建文本文檔建立的。

過程

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

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

分析原因:

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

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

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

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

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

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

測試

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

1.保存為UTF-8

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

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

拓展

這里使用另一個輕量IDE:Dev-C++

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

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

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

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

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

這里就要問一個問題dev的代碼文件難道和cmd的編碼格式一樣?

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

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

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

總結(jié)

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

相關(guān)文章

  • C語言中如何利用循環(huán)嵌套輸出一個菱形

    C語言中如何利用循環(huán)嵌套輸出一個菱形

    這篇文章主要介紹了C語言中如何利用循環(huán)嵌套輸出一個菱形問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • C++實(shí)現(xiàn)LeetCode(149.共線點(diǎn)個數(shù))

    C++實(shí)現(xiàn)LeetCode(149.共線點(diǎn)個數(shù))

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(149.共線點(diǎn)個數(shù)),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 優(yōu)先隊(duì)列(priority_queue)的C語言實(shí)現(xiàn)代碼

    優(yōu)先隊(duì)列(priority_queue)的C語言實(shí)現(xiàn)代碼

    本文簡要介紹一種基于數(shù)組二叉堆實(shí)現(xiàn)的優(yōu)先隊(duì)列,定義的數(shù)據(jù)結(jié)構(gòu)和實(shí)現(xiàn)的函數(shù)接口說明如下
    2013-10-10
  • C++如何在變量前面加#

    C++如何在變量前面加#

    這篇文章主要介紹了C++如何在變量前面加#問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • VS2022連接sqlserver數(shù)據(jù)庫教程

    VS2022連接sqlserver數(shù)據(jù)庫教程

    本文主要介紹了VS2022連接sqlserver數(shù)據(jù)庫教程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • 詳解C++?轉(zhuǎn)換的非正式分類

    詳解C++?轉(zhuǎn)換的非正式分類

    C++?正式分類方法是直接按語法分類,分為:隱式轉(zhuǎn)換和顯示轉(zhuǎn)換。這篇文章主要介紹了C++?轉(zhuǎn)換的非正式分類,需要的朋友可以參考下
    2022-01-01
  • Matlab處理圖像后實(shí)現(xiàn)簡單的人臉檢測

    Matlab處理圖像后實(shí)現(xiàn)簡單的人臉檢測

    本文主要介紹一下如何使用matlab進(jìn)行圖像處理后實(shí)現(xiàn)人臉檢測,感興趣的可以了解一下
    2021-11-11
  • C語言鏈表實(shí)現(xiàn)商品庫存管理系統(tǒng)

    C語言鏈表實(shí)現(xiàn)商品庫存管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言鏈表實(shí)現(xiàn)商品庫存管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • C++左值引用與指針的區(qū)別及說明

    C++左值引用與指針的區(qū)別及說明

    左值引用與指針的區(qū)別:左值引用是一個別名,只能綁定左值,對左值引用的訪問與訪問左值是相同的;指針是一個變量,該變量在內(nèi)存中存在真是的物理地址,該變量內(nèi)的存儲的是一個內(nèi)存地址,訪問指針變量對應(yīng)的內(nèi)容需要配合解訪問符*
    2025-03-03
  • C++中淺拷貝與深拷貝的詳解及其作用介紹

    C++中淺拷貝與深拷貝的詳解及其作用介紹

    這篇文章主要介紹了C++中淺拷貝與深拷貝的詳解及其作用介紹,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09

最新評論