将带有字符数组的结构复制到字符数组
Copy structure with char array to char array
我有一个问题作为主题。
我的代码:
struct message{
char sender_name[20];
char dest_name[20];
char content_message[256];
};
int main() {
message tmp;
printf("Enter your namen");
std::cin>>tmp.sender_name;
printf("Enter dest namen");
std::cin>>tmp.dest_name;
printf("Enter message to %s n",tmp.dest_name);
std::cin>>tmp.content_message;
memcpy(&buffer, &tmp,sizeof(tmp));
printf("MEASAGE: %sn",buffer);
return EXIT_SUCCESS;
}
缓冲区中只有 tmp.sendername,我不知道如何修复它。我读了很多主题,但我无法解决它。
请帮忙。
它复制了所有内容,您只是访问错误:
#include <iostream>
#include <cstdlib>
#include <cstring>
using namespace std;
struct message{
char sender_name[20];
char dest_name[20];
char content_message[256];
};
char buffer[sizeof(message)];
int main() {
message tmp;
printf("Enter your namen");
std::cin>>tmp.sender_name;
printf("Enter dest namen");
std::cin>>tmp.dest_name;
printf("Enter message to %s n",tmp.dest_name);
std::cin>>tmp.content_message;
memcpy(&buffer, &tmp,sizeof(tmp));
message *cpy = reinterpret_cast<message*>(buffer);
printf(
"sender_name: '%sn'"
"dest_name: '%sn'"
"content_message: '%sn'",
cpy->sender_name,
cpy->dest_name,
cpy->content_message
);
return EXIT_SUCCESS;
}
测试:
g++ buffer.cc && printf '%sn' foo bar baz | ./a.out
输出:
Enter your name
Enter dest name
Enter message to bar
sender_name: 'foo
'dest_name: 'bar
'content_message: 'baz
'
另外,顺便说一句,可能不是读取字符缓冲区的好方法。这个 API 几乎不能进行任何范围检查(因为它似乎也适用于指针而不仅仅是数组(,这将使它与gets
一样不安全。它似乎也没有被记录在案(http://en.cppreference.com/w/cpp/io/basic_istream/operator_gtgt(,并且出于 gcc 和 clang,只有 gcc 接受它。
相关文章:
- 指向指向字符数组的指针数组的指针
- 比较字符数组
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 使用无符号字符数组有效存储内存
- 错误:字符数组的初始值设定项太多
- 对字符数组中的元素执行逐位操作
- C++ 无法在字符数组中使用 for 循环打印字母模式
- 如何在 C++ 中从文件中读取字符数组(带有一些空格)
- C++ 传递二维字符数组
- 无法在 C++ 中输入字符数组
- 字符数组中的元素数
- 我的目标是编写一个程序来计算和存储字符串在字符数组中出现的位置
- 使用字符数组作为 Map 中的键
- C++:__aligned(__alignof__) 导致字符数组数据出现问题?
- 按顺序声明的字符数组重叠
- 在 C++ 中字符串的大小与字符数组的大小
- 寻找一种更好的方法来表示无符号字符数组
- 如何打印 2D 字符数组C++
- 从字符数组的元素中减去'a'是什么意思
- 我是否不正确地集中了这些字符数组?