一、問題來源
今天在VS2010平台上,嘗試采用scanf()
string word;
scanf("%s",&word);
然后發現錯誤,輸出采用
printf("%s\t",word);
發現也不行,然后轉換成cin和cout就OK,於是懷疑是不是%s出了問題,果然是這樣。
因為在C中的字符串是存儲在char數組中,是一個基本類型的組合,但是string則是C++中的封裝好的類。
所以輸出可以采用
printf("%s\t",word.c_str());
但是感覺輸入是沒得救啊!
2.網上解答(來源於百度知道)
一直以來對這個問題都不是很清楚:只是知道C語言里有<string.h這個頭文件,所以就想當然的認為C語言里有string這個
類型,可以通過下面這種形式來聲明string的變量 string aString;
后來編程時發現通不過編譯,又查資料才知道原來C語言里壓根就沒有string這個類型,所以字符串都是通過char數組來存儲的,
而<string.h這個頭文件里聲明的函數原型也全是針對char數組的種種操作。直到C++中才出現了string這個類(注意是類,
不是類型)。這是網上我找到的比較滿意的答復:
" C語言中有string類型變量嗎"
這里的 string 有 二 義性。
(1) 如果 string 是普通詞匯,“C語言中有字符類型變量嗎”, 答,有。 字符類型 用 char 聲明。
char str[]="This is a string";
(2) 如果 string 是專用詞匯,“C語言中有string類型變量嗎”,答,沒有。string 是 類,是 class, 不是類型,不是 type.