Search code examples
c++string-literals

ERROR deprecated conversion from string constant to 'char*'


I'm stuck with error message deprecated conversion from string constant to 'char*'

What I tried to do here is to assign "First", "Last" to cfoo1 and make cfoo2 equal to cfoo1. Lastly, display cfoo1 and cfoo2 to standard output.

#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;
}

Solution

  • There are two issues:

    1. Using string literals (which are of type char const*) to call a function that expects char[].

    2. Trying to assign to char arrays.

    Fixes:

    1. Change the constructor to:

      CFoo(char const* first, char const* last);
      
    2. Change its implementation to:

      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);
      }
      

    You also need to change the implementation of CFoo::WriteFoo() to use the entire string

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

    Also,

    Accessing m_first[BUF] or m_last[BUF] is an error since the maximum value of a valid index to access those arrays is BUF-1.