2

我已经在 char* 中声明并初始化了一个字符串,如下所示:

int length;
cout<<"Enter string length: ";
cin>>length;
char* str = new char[length];
cout<<"Enter your string here:"; 
for(int i = 0;i < length;i++)
cin>>str[i];
cout<<str<<endl;

使用 DevC++ 编译,它给了我我在那里输入的内容,但在 Visual C++ 中,它打印出最后带有一些随机字符的字符串。例如;我输入“hello”Visual C++ 给我:“hello ^^&* (Y &”。有人可以向我解释为什么会发生这种情况吗?

4

4 回答 4

2

你不是 null 终止字符串。您需要分配一个 char 数组,length + 1以便为​​字符串末尾的空字符留出空间。

于 2012-11-23T03:55:05.403 回答
2

您在字符串末尾缺少一个空终止符。我猜非 VC++ 编译器会以某种方式处理它,但在 VC++ 中,您必须分配长度 + 1 个字符,然后将最后一个字符设置为 '\0'。例子:

char* str = new char[length + 1];

cout << "Enter your string here:"; 
for (int i = 0; i < length; i++)
    cin >> str[i];

str[length] = '\0';
于 2012-11-23T03:57:04.537 回答
0

你永远不会终止你的字符串。放str[length-1] = '\0';.

或者,更好的是,您应该分配new char[length+1];.

恕我直言...

于 2012-11-23T03:56:16.720 回答
0

改变这个

for(int i = 0;i < length;i++)
    cin>>str[i];

cin>>str;

不需要for循环。您可以将字符串作为一个整体而不是逐个字符读取。

或者,如果您想逐个字符地读取它,则需要 a\0来标记字符串的结尾,因为cout假定字符串以 a 结尾\0

所以本质上,你需要

for(int i = 0;i < (length - 1);i++)
    cin>>str[i];

str[i] = '\0'.

您阅读length -1chars 并以\0.

于 2012-11-23T03:56:37.220 回答