这是我的代码:
#include <iostream>
using namespace std;
int main(){
char *data = new char[20];
for(int i = 0; i < 2; i++){
cin >> (data+i*10);
}
for(int i = 0; i < 20; i++){
if(*(data+i) == '\n'){
cout << " newline ";
}else{
cout << *(data+i);
}
}
int test = static_cast<int>(*(data+9));
cout << "this is a test " << test;
system("pause");
return 0;
}
我的输入是这样的:
123456789
123456789
执行是这样的:
123456789
123456789
123456789 123456789 this is a test 0 . . .
变量test
为0。ASCII空格为十进制32。
为什么我的执行结果中有两个空格(第一个9和1之间的空格,第二个9和t之间的空格)?
答案 0 :(得分:3)
不是空格字符。它们是不可打印的字符try:
loop.run_until_complete(main_loop(tasty_client, streamer))
except KeyboardInterrupt:
print("Received exit, exiting")
# find all futures/tasks still running and wait for them to finish
pending_tasks = [
task for task in asyncio.Task.all_tasks() if not task.done()
]
loop.run_until_complete(asyncio.gather(*pending_tasks))
loop.close()
exit()#stops the script
。
请注意,cppreference表示函数std::operator>>(std::istream&, char*)
(该页面上的函数#2):
不提取空格字符。
和
附加的空字符值
'\0'
存储在输出的末尾。
因此,当CharT()
在您的输入中遇到换行符时,它将空字符写入operator>>
和data[9]
。打印出来的效果取决于您的终端。显然,您的设计使它看起来像一个空间。
但是请注意,提取到data[19]
中的此函数非常危险,因为它可能会超出有效存储空间的范围。特别是,请不要在真实代码中将此功能与char*
一起使用,因为您不能阻止用户输入超出您分配的范围的输入。而是创建一个std::cin
并输入其中,该字符串将根据需要自动增长字符串。