我想将struct元素中的数据带到内部元素。 什么是更好的方法来做到这一点。 它显示错误:无效的数组assignmen berror:无效的数组ssignment 错误:无效的数组赋值错误:未在此范围内声明'strcpy'。
#include <iostream>
#include <string>
using namespace std;
struct A
{
char Ip[16];
char port[6];
char sessionkey[32];
}
int main()
{
char m_ip[16];
char m_port[6];
char m_sessionkey[32];
A a;
a.Ip = "10.43.160.94111";
a.port = "12345";
a.sessionkey = "12Abcd12345Abcd12345Abcd1234512";
strcpy(m_ip,a.Ip);
strcpy(m_port,a.port);
strcpy(m_sessionkey,a.sessionkey);
cout << "m_ip:" << m_ip << endl;
cout << "m_port:" << m_port << endl;
cout << "m_sessionkey:" << m_sessionkey << endl;
}
答案 0 :(得分:2)
我认为你的意思是以下(C字符串函数在标题<cstring>
中声明)
#include <cstring>
//...
char m_ip[16];
char m_port[6];
char m_sessionkey[32];
A a = { "10.43.160.94111", "12345", "12Abcd12345Abcd12345Abcd1234512" };
std::strcpy(m_ip,a.Ip);
std::strcpy(m_port,a.port);
std::strcpy(m_sessionkey,a.sessionkey);
或者代替
A a = { "10.43.160.94111", "12345", "12Abcd12345Abcd12345Abcd1234512" };
你可以写
A a;
a = { "10.43.160.94111", "12345", "12Abcd12345Abcd12345Abcd1234512" };
前提是您的编译器支持C ++ 2011。
考虑到您忘记在结构定义中的右大括号后面放置一个分号
struct A
{
//...
};
^^^
编辑:在您意外更改了代码后,我想指出此代码段
A a;
string p = "10.43.160.94111";
string q = "12345";
string r = "12Abcd12345Abcd12345Abcd1234512";
p.copy(a.Ip,16,0);
q.copy(a.port,6,0);
r.copy(a.sessionkey,32,0);
没有意义。没有必要引入std::string
类型的对象来初始化struct A
类型的对象。
您可以通过以下方式初步定义结构
struct A
{
std::string Ip;
std::string port;
std::string sessionkey;
};
答案 1 :(得分:1)
对于使用C ++编写,更喜欢使用std::string
而不是char *
或char[]
。
如果您使用std::string
,则许多问题将不再存在。
示例:
#include <iostream>
#include <string>
struct A
{
std::string Ip;
std::string port;
std::string sessionkey;
};
int main()
{
std::string m_ip;
std::string m_port;
std::string m_sessionkey;
A a;
a.Ip = "10.43.160.94111";
a.port = "12345";
a.sessionkey = "12Abcd12345Abcd12345Abcd1234512";
// copy data from a to local variables
m_ip = a.Ip;
m_port = a.port;
m_sessionkey = a.sessionkey;
std::cout << "m_ip:" << m_ip << std::endl;
std::cout << "m_port:" << m_port << std::endl;
std::cout << "m_sessionkey:" << m_sessionkey << std::endl;
}
如果您坚持使用strcpy
,则必须使用#include <string.h>
或#include <cstring>
包含C头文件string.h。请注意,这是一个C头文件,它与C ++ #include <string>
头文件明显不同。
答案 2 :(得分:0)
您应该像这样更改代码:
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
struct A
{
char* Ip;
char* port;
char* sessionkey;
};
int main()
{
char m_ip[16];
char m_port[6];
char m_sessionkey[32];
A a;
a.Ip = "10.43.160.94111";
a.port = "12345";
a.sessionkey = "12Abcd12345Abcd12345Abcd1234512";
strcpy(m_ip,a.Ip);
strcpy(m_port,a.port);
strcpy(m_sessionkey,a.sessionkey);
cout << "m_ip:" << m_ip << endl;
cout << "m_port:" << m_port << endl;
cout << "m_sessionkey:" << m_sessionkey << endl;
}
strcpy()
函数位于C ++ / C ++ 11中的cstring
头文件中,因此您必须在代码中添加#include<cstring>
。