是什么错误。字符串赋值

时间:2015-07-23 13:29:24

标签: c++ arrays string c++11 char

我想将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;
}

3 个答案:

答案 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>