#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;
}追问
而*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;
}
如
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()函数呢?