为什么字符数组没有打印值?
Why char array is not printing value?
我需要从字符数组中读回"id"和"port"。但是cout不打印任何东西。正确的方法是什么?
谢谢你的帮助。
int main() {
char addr[6];
int id = 2;
short port = 1;
memcpy(&addr[0], &id, sizeof(int));
memcpy(&addr[4], &port, sizeof(short));
cout << "addres:" << addr << endl;
return 0;
}
因为,假设 int 在目标平台上是 32 位,您将 4 个字节(0, 0, 0, 2
或2, 0, 0, 0
,取决于字节序(复制到addr
指向的地址中,并且假设 short 是 16 位,您将在addr+4
指向的地址复制 2 个字节(0, 1
或1, 0
,具体取决于字节序(, 导致addr
包含字节0, 0, 0, 2, 0, 1
或2, 0, 0, 0, 1, 0
。
C++中的 C 样式字符串以 0 结尾,因此如果第一个字符为 0,则addr
被解释为空字符串。
如果第一个字符是 2,您仍然不会看到任何内容,因为这不是可打印的字符。(它是控制字符 STX(文本开头(。
您可以打印addr
内容的整数值以了解其中的内容。
for (int i = 0; i < 6; ++i )
{
std::cout << "element " << i << " : " << static_cast<int>(addr[i]) << std::endl;
}
您很可能会得到:
element 0 : 2
element 1 : 0
element 2 : 0
element 3 : 0
element 4 : 1
element 5 : 0
这假设:
sizeof(int)
在您的平台上是 4
。sizeof(short)
在您的平台上是 2
。- 您的平台对数字使用小端系统。
当您使用
cout << "addres:" << addr << endl;
您正在打印一个字符串,该字符串在第一个元素中具有不可打印的字符,在第二个元素中具有空字符,即您正在打印仅包含不可打印字符的以空结尾的字符串。
相关文章:
- 打印字符数组地址的正确方法
- c ++控制台应用程序,如何在控制台外部打印字符
- 无法使用 swprintf 在 WCHAR* 中打印字符*
- 存储和打印字符,但输出不是预期的
- 如何使 printf 以与 NSLog 相同的方式打印字符缓冲区?
- 在带有 (void*) 强制转换的字符串中打印字符的内存地址
- C++无法打印字符变量
- 无法打印字符向量C++向量
- 为什么在编辑 fastq 文件并将输出写入新的 fastq 文件时引入不可打印字符?
- C :如何询问文件名并打印字符数组
- 循环中的 Cout 不会按定义的字符逐个打印字符
- (C++) 打印字符数组字符串的单词时出现问题
- 用putchar在屏幕上打印字符
- 在C 中使用继续语句的打印字符
- 在 for 循环 c++ 中打印字符
- 使用while和if递归打印字符
- 打印字符数组 c++
- 如何使用Xcode中的Unicode打印字符╔(和其他字符)
- cout.put() 是否推荐使用 cout<< 打印字符
- C++ 中的密码 |打印字符后删除字符