C 有關問題

2023-01-03 21:56:32 字數 1349 閱讀 1242

1樓:匿名使用者

原因是你把字元和字串的概念搞混了.

char 只定義了一個位元組,也就是一個acsii字元.

而一個字串是由多個char組成的,通常以0結尾.常量表達時用雙引號"字串"

一箇中文字元佔用兩個位元組, abcd1236386 同學留下的**是可以參考的,但是仍然有很大的問題,就是給name1[2]和name2[2]只定義了2個預留字元空間, 沒有為最後標識結尾的0預留空間, 程式執行起來看上去也許是正常的,實際上確有很大的漏洞,因為在你輸入中文時,增加的0結尾字元會被寫到沒有分配的空間,從而造成破壞.

題外話:

當然這麼簡單的程式是不會造成很大的影響,而且通常編譯器會對齊訪問空間也就是說name1[2]實際在編譯器分配了4個位元組(要看你的編譯器是不是開啟了這方面的優化引數), 所以只要輸入的字元不超過3個,執行起來都會看上去很正常...

2樓:匿名使用者

因為一個漢字是兩個字元!!

所以你輸入姓一個漢字就輸入了兩個,name1和name2合起來是一個「張」

所以就不行了,應該是用陣列

char name1[2],name2[2];

但是這樣就不能直接寫name1==『張』了,應該用if(strcmp(name1,「張」)==0&&strcmp(name2,"三"))

標頭檔案應該包含

#include

//源程式已改好

#include

#include

void main()}

3樓:匿名使用者

char 型別只函有一個位元組字元,中文每個字有兩個位元組所以入張後name1,name2就全入完了,一共兩個位元組,它們兩個共同組成張字編碼

將張三換成英語字母就應該可以了,

建議:剛開始學程式最好不要用中文,呵呵

4樓:匿名使用者

因為你原先定義的char name1,name2是一個位元組的大小,而「張」是兩個位元組,c++中自動將一部分賦值給了name2,導致以上的情況

5樓:

#include

using namespace std;

int main()

這樣就可以了。。 後面的名輸入前,要輸入個換行就可以了。。你試試吧!

6樓:匿名使用者

解決的辦法是定義的時候

char name1;

char name2;就好了

7樓:匿名使用者

把花括號去了

8樓:lr_離

因為你吧「回車」賦給了name2……

有關C語言的幾個問題,有關C語言幾個問題

1 不能,通不過編繹的。2 可以根據返回一個標誌來實現跳轉。如int fun 如果成功就返回1,否則返回0。看來樓主對函式理解還不夠透徹。舉個例子吧 int fun int a,int b 就像上面那個,其中括號內的int a和int b表示這個函式需要傳入引數兩個,並且這兩個引數為int型別,第一...

有關C語言的小問題,關於C語言的幾個小問題

line 69 函式showarr,parr是指向結構體的指標,你這裡要訪問的應該是它的成員陣列parr pbase void showarr struct arr parr ps1 這個問題在編譯階段通常會有警告的,因為printf格式符 d是整數,你給的parr i 跟它是不匹配的,會引起 fo...

有關於C 的幾個問題

1.變數的儲存型別,主要就是決定了這個變數的屬性,extern指明瞭這個變數的定義不在這裡,它只是一個變數的宣告,就是一個通告,static限制了變數的有效作用域,並且在這個有效的作用域它都是存在的,因為它儲存在靜態儲存區。全域性靜態變數限定了這個變數只是在當前檔案中是可見的,即可以使用的,區域性靜...