问题描述
#include<bits/stdc++.h>
using namespace std;
int main()
{
char *one;
one = new char[1];
cin.getline(one,5);
cout<<one<<endl;
return 0;
}
这应该为字符指针* 1分配1个字节空间或1个字符空间。现在我使用cin.getline输入5个字符,为什么它只输出前4个字符而不是5个?以及为什么我只分配了1个字符的空间而不能只输出1个字符?
我尝试使用
for(int i = 0; one[i] != '\0'; ++i) cout<<one[i];
它执行相同的操作,它输出我输入的前4个字符,而不是5个字符。我希望它只存储1个字符,因为我只分配了1个字节的空间。
解决方法
为什么只输出前4个字符而不是5个字符?
因为您的程序具有未定义的行为。
而且也是因为getline(char * s,std::streamsize count)
从流中读取的字符数最多少于count
,因此将空字符附加到它所写的内容上。
我希望它只存储1个字符,因为我只分配了1个字节空间。
您不能使用cin.getline
来做到这一点。终止符必须有空格。
#include <iostream>
int main()
{
char* one = new char[1];
std::cin.get(*one);
std::cout << *one << std::endl;
return 0;
}
此外:这里的动态分配似乎是多余的。为什么不char one;
?