我已经在 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&”。有人可以向我解释为什么会发生这种情况吗?
您不是以 null 终止字符串。 您需要分配一个
length + 1
的字符数组,以便为字符串末尾的空字符留出空间。
字符串末尾缺少一个空终止符。我猜非 VC++ 编译器会以某种方式处理它,但在 VC++ 中,你必须分配 length + 1 个字符,然后将最后一个设置为“”。示例:
char* str = new char[length + 1];
cout << "Enter your string here:";
for (int i = 0; i < length; i++)
cin >> str[i];
str[length] = '\0';
你永远不会终止你的字符串。 放
str[length-1] = '\0';
。
或者,更好的是,您应该分配
new char[length+1];
。
恕我直言...
改变这个
for(int i = 0;i < length;i++)
cin>>str[i];
到
cin>>str;
无需
for
循环。您可以读取整个字符串,而不是逐个字符地读取。
或者,如果您想逐个字符地读取它,则需要一个
\0
来标记字符串的结尾,因为 cout
假定字符串以 \0
结尾。
所以本质上,你需要
for(int i = 0;i < (length - 1);i++)
cin>>str[i];
str[i] = '\0'.
您读取了
length -1
字符并用 \0
终止它。