C++ cout-deference(unsigned char)指针,给我意外的结果
我需要看一看声明的无符号字符指针中的内容,我将问题简化为这个简短的示例C++ cout-deference(unsigned char)指针,给我意外的结果,c++,C++,我需要看一看声明的无符号字符指针中的内容,我将问题简化为这个简短的示例 #include<iostream> int main (int argc, char *argv[]) { unsigned char * buffer = new unsigned char; *buffer = 8; std::cout << "buffer = " << (unsigned char) (*buffer) << std::endl
#include<iostream>
int main (int argc, char *argv[])
{
unsigned char * buffer = new unsigned char;
*buffer = 8;
std::cout << "buffer = " << (unsigned char) (*buffer) << std::endl;
}
#包括
int main(int argc,char*argv[])
{
无符号字符*缓冲区=新的无符号字符;
*缓冲区=8;
std::cout'8'
是字符8。
8
只是一个不可见字符的代码
尝试编写*buffer=48;
并根据此猜测为什么输出为“buffer=0”。如果我们稍微扩展一下您的示例:
int main(int argc, char *argv[]) {
unsigned char * buffer = new unsigned char;
*buffer = 8;
std::cout << "buffer = [" << (*buffer) << "]\n";
}
ASCII字符8表示退格,它已将开头的[
去掉。
请注意,您不需要强制转换为无符号字符-*buffer
是一个无符号字符
如果希望它具有字符'8'
,则需要将其内容设置为8。
不要忘记删除你的新内容
int main(int argc, char *argv[]) {
unsigned char * buffer = new unsigned char;
*buffer = '8'; //<---- see the single quotes?
std::cout << "buffer = [" << (*buffer) << "]\n";
delete buffer;
}
当然,我们并不真正需要这些指针:
int main(int argc, char *argv[]) {
unsigned char buffer = '8';
std::cout << "buffer = [" << buffer << "]\n";
}
刚刚找到此未签名():
#include<iostream>
int main (int argc, char *argv[])
{
unsigned char * buffer = new unsigned char;
*buffer = 8;
std::cout << "buffer = " << unsigned(*buffer) << std::endl;
}
#包括
int main(int argc,char*argv[])
{
无符号字符*缓冲区=新的无符号字符;
*缓冲区=8;
cout 8是第8个字符,不是字符8@mahmoud您不是cout
ingunsigned char
指针。请修复标题。@LogicStuff:是的。*buffer
是一个unsigned char
,而unsigned char)(*buffer)
绝对是一个无符号字符
@barakmanos不是指针。我应该突出显示它。内存泄漏不应该是这个MCVE的一部分。@LogicStuff:是的,确实不是指针。或者可能是一个退格:建议人类清楚的代码如何?没有魔法numbers@doctorlove.绝对是退格,我不知道我记不太清楚我的ASCII码了。我查过了。@mahmoudfathy是的,它是一个字节的数字,这就是字符过去(现在仍然是)的样子在大多数平台上编码。内存中的字符只是一个字节,我链接的表让您知道什么数字被解释为什么字符。运算符是C样式转换为无符号int
(出于历史原因,名称的int
部分是可选的)。
buffer = [8]
int main(int argc, char *argv[]) {
unsigned char buffer = '8';
std::cout << "buffer = [" << buffer << "]\n";
}
int main(int argc, char *argv[]) {
unsigned char buffer = 56;
std::cout << "buffer = [" << buffer << "]\n";
}
int main(int argc, char *argv[]) {
unsigned char buffer = 56;
std::cout << "buffer = [" <<static_cast<unsigned int>(buffer) << "]\n";
}
#include<iostream>
int main (int argc, char *argv[])
{
unsigned char * buffer = new unsigned char;
*buffer = 8;
std::cout << "buffer = " << unsigned(*buffer) << std::endl;
}