繁体   English   中英

从字符串常量到'char *'的错误不建议使用的转换

[英]ERROR deprecated conversion from string constant to 'char*'

我被错误消息弃用,从字符串常量转换为'char *'

我在这里尝试执行的操作是为cfoo1分配“ First”,“ Last”,并使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. 使用字符串文字(类型为char const* )来调用需要char[]的函数。

  2. 尝试分配给char数组。

修正:

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

您还需要更改CFoo::WriteFoo()以使用整个字符串

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

也,

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM