程序代码是:
int _tmain(int argc, _TCHAR* argv[])
{
char *c;
cout<<"请输入一字符串"< cin>>c;
char *t=deBlank(c);
cout< system("pause");
return 0;
}
当运行到cin>>c;的时候报变量c使用的时候未被初始化,请问这个问题怎么解决呢,如果以后遇到类似的问题,我该如何解决,有没有什么书或者资料推荐下子
遇到类似问题,可以google
或者看C++Primer
c没有分配空间
如果只是一个字符,那么可以用
char c
cin>>&c;
c是一个空指针,需要将它指向一个确定的位置,比如
char a;
char *c=&a;
请参考:
http://blog.csdn.net/gsky1986/article/details/45388915
char *c;
这个时候都没有分配内存。
你可以先 char b ;
然后 cin b 的值,
在用*c 指向b的地址即可,
C++中最好使用
#define BUFF_SIZE 81
char *c = new char[BUFF_SIZE];
cin该操作符是根据后面变量的类型读取数据。
输入结束条件 :遇到Enter、Space、Tab键。
对结束符的处理 :丢弃缓冲区中使得输入结束的结束符(Enter、Space、Tab)
char *c;
cin>>c;由于变量c为指针类型
当后面输入的类型是指针的时候,默认将从缓冲区中读入数据,并且将数据写入到a指向的内存地址
这里会有一个溢出的问题.
比如char *c = new char[1]
或者char a; char *c = &a;
当输入ab时,其实c指向的内存区域,只有一个字符大小是我们可控制的,ab超出一个字符大小,这样的就是缓冲区溢出
溢出的空间针对于编译器以及操作系统内核看来是我们不能够使用的,但是我们使用了一些BUG的程序去修改了这些内存的数据.
而如果这些内存正好是系统或者其他程序运行的关键内存地址,那么会导致更加严重的问题,比如系统崩溃等.
而您前面报的那个,指针未初始化也是因为这样一些原因
由于指针开始时未进行初始化,那么系统为我们分配了一个指针数据类型以后,它锁指向的地址并不是我们可控制的.它的指向更是随机的,
如下程序,您可以看到c的指向并不一定是NULL
chat *c;
printf("%p\n, c);
直接cin>>c,就是往一个连编译器都不知道在哪里的内存中写入了一块数据,这样是很危险的,应该我们的程序直接读写了不属于我们程序的内存单元
char *c;
->
char *c = new char[100];