为什么c++中gets ,cin.get()等可以读取一个字符数组,但不能读取一个字符串???具体如图
这样是错误的,charstr[100],cin.getline(str,100)这样就可以,字符数组不是等同于字符串吗...
这样是错误的,char str[100],cin.getline(str,100)这样就可以,字符数组不是等同于字符串吗
展开
3个回答
展开全部
这个涉及一些较为底层的东西了。其实题主如果先学C,再学C++会有比较好的理解,所以我的回答思路也是从C到C++。
首先我们知道C语言是面向过程的,在纯C的情况下,char是早蠢野一个字符,但我们往往要面对一串字符,所以程序员们通过开辟一个陆喊字符数组保存内容,由此衍生出了类似strcpy、strcmp这种函数。这种情况下说字符数组等价于字符串是没有问题的。
但后来有了面向对象,C++相对C多了完善的对象支持,同时增加了string专门处理字符串,但此时我们要注意,string并不是基本类型,定义一个字符串比纯C下的内存开销要多一些,比如str.size()返回这个字符串的长度等,多出的内存开销就是要支撑这些功能。所以在C++下,字符串和字符数组是完全不同的两个概念。
那么回到问题本身,题主运行getline(str, 100),str其实是一个指针,指向这个数组的开头,第二个参数100则是指定容纳内容档睁的内存空间,而gets、cin.get无一例外是以这种方式工作,这些函数的参数需要是指针,所以以变量名为参数是不可能正常工作的。
首先我们知道C语言是面向过程的,在纯C的情况下,char是早蠢野一个字符,但我们往往要面对一串字符,所以程序员们通过开辟一个陆喊字符数组保存内容,由此衍生出了类似strcpy、strcmp这种函数。这种情况下说字符数组等价于字符串是没有问题的。
但后来有了面向对象,C++相对C多了完善的对象支持,同时增加了string专门处理字符串,但此时我们要注意,string并不是基本类型,定义一个字符串比纯C下的内存开销要多一些,比如str.size()返回这个字符串的长度等,多出的内存开销就是要支撑这些功能。所以在C++下,字符串和字符数组是完全不同的两个概念。
那么回到问题本身,题主运行getline(str, 100),str其实是一个指针,指向这个数组的开头,第二个参数100则是指定容纳内容档睁的内存空间,而gets、cin.get无一例外是以这种方式工作,这些函数的参数需要是指针,所以以变量名为参数是不可能正常工作的。
追问
学校里直接学的c++,,,那有什么可以用string类。但是输入的时候会把空格算上以换行解暑的方法呢?怎么能求输入string的长度呢?
追答
印象里没有,如果有空格,建议用字符数组保存用户的输入,然后调strlen()函数可以算出长度。
2018-11-08
展开全部
你可以这样理解,string相当于一个类而字行此符数组就穗带孝仅仅是个数组而已
类里面有一个字符数组
而getline是只能读字符数组的
string里面还有一猜稿些方法。比如返回字符长度啊之类的
公众号“一堆代码”回复“书籍”免费拿c/c++宝典
类里面有一个字符数组
而getline是只能读字符数组的
string里面还有一猜稿些方法。比如返回字符长度啊之类的
公众号“一堆代码”回复“书籍”免费拿c/c++宝典
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
当然不同于字符数组啦,string 和 char 是不一样的,本质不一样。
追问
所以这里是为什么呢?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询