本人使用.NET 2010编译器
#include "stdafx.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
char *a=new char; /此处a的存储空间大小已经确定了吗?
cin>>a;
int mNum=0;
for(int i=0;a[i]!='\0';i++)
mNum++;
for(int i=mNum;i>0;i--)
cout<<a[i-1];
cout<<endl;
system("PAUSE");
return 0;
}
c/c++语言的设计初衷之一,就是尽量相信程序员,而不是给程序员太多的限制
所以哪怕就算是你的操作看上去有了明显的错误(例如数组越界),也会编译通过
所以说cin只看到a是char*类型,但是cin不负责检查到底a是指向多少位char
不确定长度也可以用标准库<string>头文件下面的string类型,c++建议用这个类型代替c风格字符串char*追问
所以哪怕就算是你的操作看上去有了明显的错误(例如数组越界),也会编译通过
所以说cin只看到a是char*类型,但是cin不负责检查到底a是指向多少位char
不确定长度也可以用标准库<string>头文件下面的string类型,c++建议用这个类型代替c风格字符串char*追问
如果数组越界的话,运行过程中会发生访问错误吧~
追答有可能,也有可能不会……具体看编译器是怎么处理,也看程序是怎么样,要看越界的地方是否重要之类的各种原因都可能
静态分配是指char *p=new char[10];吗?
静态分配一般是指局部变量的 char p[10];
那如何用string 来输入不确定长度字符串呢?
追答#include
using namespace std;
string str;
cin>>str;//这样输入会用空格和回车隔断字符串,例如输入abc edf回车,这里str就变成abc,因为abc后面有空格
getline(cin,str);//不用空格隔断字符串,而是输入一行,例如输入abc edf回车,这里str就变成"abc edf"
温馨提示:答案为网友推荐,仅供参考
第1个回答 2011-12-19
char *a只是分配了一个指针,是字符类型的指针。
最后长度是没有确定的。但是如果输入的字符长度过长,发生溢出,很容易导致一些错误。这一点非常不安全,所以现在的一些高级语言例如java、C#都把C++里面的指针给去掉了。
最后长度是没有确定的。但是如果输入的字符长度过长,发生溢出,很容易导致一些错误。这一点非常不安全,所以现在的一些高级语言例如java、C#都把C++里面的指针给去掉了。
第2个回答 2011-12-19
不知LZ可曾听过动态内存分配,动态内存分配不用声明空间大小,只管申请空间就好了,因为动态分配是在执行阶段发生的而静态分配是在编译阶段发生的,所以后者得声明空间大小而前者不用,但是请记住这样用虽然方便,但是要记住,分配的动态空间用完以后得用delete关键字手动释放,不然会造成内存泄漏哦亲追问
静态分配是指char *p=new char[10];吗?