一、问题来源
今天在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.
时间: 2024-12-29 20:28:13