关于C语言中有string类型吗?

一、问题来源

今天在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

关于C语言中有string类型吗?的相关文章

C语言中有bool类型吗?

之前一直都没有注意到,最近在用C语言写DSP算法时,偶然间发现我函数中定义的bool类型的变量在VC6.0(我主要用它来检查一下语法错误)中编译居然报错了,说是bool类型没有定义.用了这么久的C和C++了,一直觉得bool这种基本类型,应该是C语言内置的类型,怎么会没有定义呢?事实证明,我的想法完全错误了. 有了网络,一切问题都变得那么容易了,我很容易地搜到了相关的解答. C语言里面是没有bool(布尔)类型的,C++里面才有,这就是说,在C++里面使用bool类型是没有问题的.bool类型有

【转】C#语言之“string格式的日期时间字符串转为DateTime类型”的方法

方法一:Convert.ToDateTime(string) string格式有要求,必须是yyyy-MM-dd hh:mm:ss ================================================ 方法二:Convert.ToDateTime(string, IFormatProvider) DateTime dt; DateTimeFormatInfo dtFormat = new System.GlobalizationDateTimeFormatInfo()

C语言使用栈实现String类型的两个大数相加

要开始找工作了,记录下学习的关于数据结构的应用~~从栈开始~~ 栈和指针的应用~~~ 实现String类型的两个大数相加 主要思想是通过C语言的栈来实现,栈是后进先出的特点,因此很适合做这类计算.建立四个栈,分别按字符串字符先后顺序入栈大数的整数部分和小数部分,然后先计算小数部分的,由于小数部分是高位对齐,因此一直出栈最长小数栈的字符并进入小数结果的栈,小数位数对齐后,两个小数栈出栈进行相加.然后进行整数栈相加,由于整数部分是按低位对齐,因此直接出栈相加即可,将每位相加结果入结果整数栈.比如字符

[每天一个知识点]18-Java语言-在switch中接受String类型

在Java7中增加了一个新特性,switch可以接受String类型的变量,这就省下了书写大量if ("xxx".equals(yyy))的繁复工作.示例代码就免了,仅仅是一个数据类型的改变而已,如果会用原来的switch而在5分钟内搞不定String类型的switch,建议还是放弃做程序员吧-- 至于内部实现,java一点都没增加新内容,其实代码是被转换成了这个样子 switch (xxx.hashCode()) { case 1024: // 假设原来是"aaa"

java内存分配和String类型的深度解析(转)

一.引题 在java语言的所有数据类型中,String类型是比较特殊的一种类型,同时也是面试的时候经常被问到的一个知识点,本文结合java内存分配深度分析 关于String的许多令人迷惑的问题.下面是本文将要涉及到的一些问题,如果读者对这些问题都了如指掌,则可忽略此文. 1.java内存具体指哪块内存?这块内存区域为什么要进行划分?是如何划分的?划分之后每块区域的作用是什么?如何设置各个区域的大小? 2.String类型在执行连接操作时,效率为什么会比StringBuffer或者StringBu

【转】java内存分配和String类型的深度解析

一.引题 在java语言的所有数据类型中,String类型是比较特殊的一种类型,同时也是面试的时候经常被问到的一个知识点,本文结合java内存分配深度分析关于String的许多令人迷惑的问题.下面是本文将要涉及到的一些问题,如果读者对这些问题都了如指掌,则可忽略此文. 1.java内存具体指哪块内存?这块内存区域为什么要进行划分?是如何划分的?划分之后每块区域的作用是什么?如何设置各个区域的大小? 2.String类型在执行连接操作时,效率为什么会比StringBuffer或者StringBui

Java内存分配和String类型的深度解析

一.引题 在java语言的所有数据类型中,String类型是比较特殊的一种类型,同时也是面试的时候经常被问到的一个知识点,本文结合java内存分配深度分析关于String的许多令人迷惑的问题.下面是本文将要涉及到的一些问题,如果读者对这些问题都了如指掌,则可忽略此文. 1.java内存具体指哪块内存?这块内存区域为什么要进行划分?是如何划分的?划分之后每块区域的作用是什么?如何设置各个区域的大小? 2.String类型在执行连接操作时,效率为什么会比StringBuffer或者StringBui

C#6.0语言规范(四) 类型

C#语言的类型分为两大类:值类型和引用类型.值类型和引用类型都可以是泛型类型,它们采用一个或多个类型参数.类型参数可以指定值类型和引用类型. 1 type 2 : value_type 3 | reference_type 4 | type_parameter 5 | type_unsafe 6 ; 类型的最终类别(指针)仅在不安全的代码中可用.这在Pointer类型中进一步讨论. 值类型与引用类型的不同之处在于值类型的变量直接包含它们的数据,而引用类型的变量存储对其数据的引用,后者称为对象.对

IOS学习之路——Swift语言(2)——基本类型与函数

一.可选型 为什么会有可选型?当一个变量被希望表示为某一个指定的类型值,同时也被希望在某种情况下表示为空.那么就需要一个可选型.Optional 可选型的语法是在Swift的基本类型后面添加 ? 符号,如 Int? String?  可选型如果取值为空,那么表示为 nil 如果想定义一个可选型的变量,那么需要显示的声明为可选型.可选型变量打印时显示Optional 可选型变量需要进行解包(unwrap)才能与其他的变量进行运算. 解包: 1. 强制解包,使用 ! 关键字,强制解包是具有风险的,当