将带有字符数组的结构复制到字符数组

Copy structure with char array to char array

本文关键字:字符 数组 复制 结构      更新时间:2023-10-16

我有一个问题作为主题。

我的代码:

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 接受它。