C語言中的字串是如何儲存漢字的?

時間 2021-05-12 05:36:25

1樓:

這東西應該和具體的環境有關。

在VisualStudio預設情況下,是GBK編碼,兩個位元組存乙個漢字,因此如果引用不慎會造成亂碼。

#include

intmain

()/*

* 輸出: c4 e3 ba c3

* 編碼: 你 : c4e3

* 好 : bac3

*/printf

("%s",s

);/*

* 輸出: 你好

* 注: 程式正常操作

*/printf

("%s",s

+1);/*

* 輸出: 愫胅

* 注: 輸出了亂碼,同時程式直接退出。要執行後面的程式應將本行語句注釋掉。

*/printf

("%s",s

+2);/*

* 輸出: 好

*/return0;

}同時,請看

譚九鼎:C語言與中文的一些測試 (Win, UTF8原始碼)

2樓:嵌入式Linux

#include "stdio.h"

int main(void) 輸出

5 你好

Process exited after 0.04922 seconds with return value 0

請按任意鍵繼續. . .

3樓:勝勳

C程式如下

#include

unsigned

chara[

16]="人們笑我太瘋癲"

;int

main()

4樓:小莊讀書

首先,不論漢字還是其它字元,儲存到記憶體都是要經過特定編碼方式編碼的。

比如,常見的「GBK」編碼方式裡,「知乎」二字的編碼分別是「知(D6AA)乎(BAF5)」,C語言的字串按逐個位元組的方式儲存「知乎」,就是把上面的GBK編碼(D6AA)和(BAF5)儲存到記憶體裡面,由於「知乎」每個字占用了兩個位元組的空間,所以共需要四個位元組的空間來儲存。

當然,不同的編碼方式,每個字元占用的記憶體空間大小可能是不同的,只是上面提到的「GBK」編碼方式裡面,漢字通常占用兩個位元組的空間。

5樓:Alan

首先在c語言裡如果你要儲存的漢子比如是「你好知乎」這個字串,那麼在編輯器裡會根據這幾個漢字的內在編碼(乙個漢子通常需要2個位元組來標識其唯一編碼),對這個字串進行編碼成8個位元組,然後進行儲存。

6樓:江曉錦翁

字串,舉例乙個人的姓名:小明

用英文儲存應該是:xiaoming,乙個字元佔乙個位元組所以,應該是char[7]

但是C語言會預設加上乙個'\0',它也會佔乙個位元組所以應該是char[8]

但是漢字在字串中,乙個漢字佔兩個位元組

同理,應該是char[4]

或者可以用windows庫里的wchar_t來儲存,這個預設就是兩位元組

C語言字串如何賦值及輸出?

那個人 你這不是字串賦值,而是字串指標賦值。你定義的是乙個字串指標,指向的是字串常量的起始位址。字串定義 char buf LEN 賦值 strcpy buf,string 或sprintf buf,s string 先不用嘟嘟嘟,p abc 其他不變 首先執行時記憶體裡面會有乙個位置儲存 abc ...

為什麼 C 語言中可以將字串字面量寫成 hello world 這種形式?

很簡單,這樣你就能在文字編輯器中,換行書寫乙個很長的字串了嘛。否則,你的乙個很長的字串,寫出來會怎麼樣,你需要左右滾動你的水平滾動條,不方便。看起來也比較醜。 Narsil 這個問題有點.我認為語法問題沒有啥糾結的,就是這樣規定的,遵照即可,你可以自己查查 c 的標準或者 the c program...

go語言中匯入包名為何是字串型別的?

鄧毅 import 後面跟的字串是包的路徑,這個路徑可以是任何作業系統可以接受的相對路徑,相對於 GOPATH中的任何乙個路徑 再加上 src 等 這裡必須用字串,因為裡面可以包含空格或者其他 Go 不認識的字元。通常,直接引用開源的 package 的話,這裡面一定包含了至少乙個 例如 http ...