问个C++菜鸟级别的问题,程序如下:

#include <iostream.h>
#include <string.h>
void main()
{ char *str;
cin >> str;
cout << strlen(str);
}为什么这样用strlen()会出错,将*str改为str[20]就没有问题?

定义字符串的时候,当你这样定义str[20]时,系统会为你开辟一个20字符的字符数组空间。
而*str只是一个指针,没有开辟空间。 没有空间就输入就会出错的。用malloc开辟一个空间就ok了。如:

#include <string.h>
#include <malloc.h>
#include <iostream.h>
void main()
{
char *str;
str =(char *)malloc(10);
cin >> str;
cout<<str;
}追问

嗯,谢谢明白了

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-08-08
在C++里面完全可以用stl的string,没有必要使用C风格的字符串。

int main()
{
string s;
cin >> s;
cout << s.length();

system("pause");
return 0;
}

使用C风格得这样子写:
int main()
{
const int BUFFER_LEN = 20;
char *tmp = new char[BUFFER_LEN + 1];
unsigned long inputLen = 0;
while (cin.get(tmp, BUFFER_LEN))
{
inputLen += strlen(tmp);
}

cout << inputLen;
delete tmp [];

system("pause");
return 0;
}
第2个回答  2011-08-08
你的指针都没有开辟空间!
第3个回答  2011-08-08
c++ 可以用string
第4个回答  2011-08-08
char str[20];
第5个回答  2011-08-08
*str只是个指针,没有分配空间追问

有道理,可是我已经cin >> str了,如何才能实现输入这种没有固定长度的str并且能用strlen()函数呢?

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网