ERROR不推荐将字符串常量转换为'char *'

时间:2014-09-02 03:14:06

标签: c++ string-literals

我发现错误消息已弃用从字符串常量转换为' char *'

我在这里尝试做的是分配" First"," Last"到cfoo1并使cfoo2等于cfoo1。最后,将cfoo1和cfoo2显示为标准输出。

#include <iostream>
#include <cstring>
#include "cfoo.h"

using namespace std;

CFoo :: CFoo(char first[], char last[]){

    m_first[BUF] = first[BUF];
    m_last[BUF] = last[BUF];
}

void CFoo :: WriteFoo(){

    cout << m_first[BUF] << ", " << m_last[BUF];
}



#ifndef CFOO_HEADER
#define CFOO_HEADER

#include <iostream>
#include <cstring>

using namespace std;

const int   BUF = 256;

class   CFoo{

    public:
        CFoo(char first[], char last[]);

        void WriteFoo();

    private:
        char    m_first[BUF];
        char    m_last[BUF];
};

#endif


#include <iostream>
#include "cfoo.h"

using namespace std;

int main(){

    CFoo    foo1("Jong", "Yoon");
    CFoo    foo2 = foo1;

    cout << "foo1 = ";
    foo1.WriteFoo();
    cout << endl;

    cout << "foo 2 = ";
    foo2.WriteFoo();
    cout << endl;

    return 0;
}

1 个答案:

答案 0 :(得分:1)

有两个问题:

  1. 使用字符串文字(类型为char const*)来调用期​​望char[]的函数。

  2. 尝试分配给char数组。

  3. 修正:

    1. 将构造函数更改为:

      CFoo(char const* first, char const* last);
      
    2. 将其实施更改为:

      CFoo(char const* first, char const* last)
      {
        // Make sure to copy at most BUF-1 characters
        // to m_first and m_last.
      
        m_first[0] = '\0'
        strncat(m_first, first, BUF-1);
      
        m_last[0] = '\0'
        strncat(m_last, last, BUF-1);
      }
      
    3. 您还需要更改CFoo::WriteFoo()的实现以使用整个字符串

      void CFoo::WriteFoo()
      {
          cout << m_first << ", " << m_last;
      }
      

      此外,

      访问m_first[BUF]m_last[BUF]是一个错误,因为访问这些数组的有效索引的最大值为BUF-1