C語言字串初始化錯誤

2021-10-01 15:23:11 字數 1632 閱讀 1216

在寫指標陣列題目時,遇到數字轉換問題。

問題如下:

將大於0小於1000的阿拉伯數字轉換為羅馬數字。

表示個位數:i,ii,iii,iv,v,vi,vii,viii,ix

表示十位數:x,xx,***,xl,l,lx,lxx,l***,xc

表示百位數:c,cc,ccc,cd,d,dc,dcc,dccc,cm

我選擇了查表法。

第一次(錯誤的)**如下:

#includeint main()

;//將羅馬數字儲存在字串陣列裡。

int n, t;

while (scanf("%d", &n) > 0)

printf("\n");

}}

編譯器可以正常執行但一直在警告。

[warning] deprecated conversion from string constant to 『char*』 [-wwrite-strings]

//警告:不推薦從字串常量轉換為』char '[-wwrite-strings]

為什麼呢?

經過查閱資料,我了解到原來char *背後的含義是:給我個字串,我要修改它。

而理論上,我們傳給函式的字面常量是沒法被修改的。

所以說,比較合理的辦法是把引數型別修改為const char *。

這個型別說背後的含義是:給我個字串,我只要讀取它。

第二次(錯誤的)**如下:

#includeint main()

;//將羅馬數字儲存在字串陣列裡。

int n, t;

while (scanf("%d", &n) > 0)

printf("\n");

}}

經過測試得到以下資料

1cxi

9cxix

10cxx

11cxxi

99cix

100ccx

150cclx

999(null)ix

一開始看到這串資料,我整個人都炸了。

經過多次推理,我堅信我解題的邏輯並沒有問題

但我鍥而不捨地測試以及學長的幫助下後,**終於崎嶇且正確了。

第三次(正確的)**如下:

int main()

;//將羅馬數字儲存在字串陣列裡。

int n, t;

while (scanf("%d", &n) > 0)

} printf("\n");

}}

經過測試**正確,這說明字元陣列儲存""是無效的。

但我一直在想,它為什麼會是無效的?

看了很多資料,我一直都沒有找到答案。

剛剛在優化**的時候無意中發現了字串陣列a[0][10]"ix"後沒有逗號。

第四次(正確的)**如下:

#includeint main()

;//將羅馬數字儲存在字串陣列裡。

int n, t;

while (scanf("%d", &n) > 0)

printf("\n");

}}

沒想到乙個簡簡單單的符號引起了一系列的錯誤。

寫**一定要嚴謹呀!

c語言字串初始化 C 字串

c 提供了以下兩種型別的字串表示形式 c 風格的字串起源於 c 語言,並在 c 中繼續得到支援。字串實際上是使用null字元 0 終止的一維字元陣列。因此,乙個以 null 結尾的字串,包含了組成字串的字元。下面的宣告和初始化建立了乙個 hello 字串。由於在陣列的末尾儲存了空字元,所以字元陣列的...

C 列表初始化,字串初始化

列表初始化 int a 0 int a 全面應用 int a int a 0 預設初始化 定義變數時,沒有指定初值,則變數被預設初始化。定義函式體外的變數被初始化為0,函式體內部的內建型別變數不被初始化。字串初始化 string s1 string s2 s1 string s2 s1 string...

字串初始化

在c語言程式設計中,當我們宣告乙個字串陣列的時候,常常需要把它初始化為空串。總結起來有以下三種方式 1 char str 10 2 char str 10 3 char str 10 str 0 0 第 1 2 種方式是將str陣列的所有元素都初始化為 0 而第 3 種方式是只將str陣列的第乙個元...