【发布时间】:2017-02-01 15:11:01
【问题描述】:
我遇到了如下情况,我收到了来自编译器的以下警告。
Main.cpp:14:22: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
Login(USER,PASSWORD);
这里是代码 密码.h
#define USER "user"
#define PASSWORD "pass"
Main.cpp
#include <iostream>
#include "Passwords.h"
using namespace std;
void Login(char* username,char* password)
{
cout << "UserName is " << username <<endl;
cout << "Password is " << password <<endl;
}
int main()
{
Login(USER,PASSWORD);
return 0;
}
我决定做的一件事是在 Passwords.h 文件中引入一个全局变量。但我真的很想知道解决这个问题的最佳做法是什么。
我希望没有人会在提出相同问题时将此标记为重复。我需要以合法的方式消除此警告并寻找最佳实践,因为同一问题的许多答案提供了一些技巧来关闭编译器警告和一些强制转换解决方案。
更新
Login 函数实际上是一个虚函数,因此参数数据类型不能从char * 更改为const char*。为简单起见,我使用了特定的代码段。
【问题讨论】:
-
右侧第一个相关链接中得分最高(注意:不接受)的答案给出了可接受的解决方案:stackoverflow.com/questions/59670/… 这对您来说足够合法吗?
-
使用
std::string -
@NathanOliver,不同意。这里不需要
std::string,这将是一个额外的转换。 -
使用连续数据存储密码很不安全,因为它不安全。所以
char*和std::string都是不合适的。 -
@Bathsheba 我希望你不要以此为基础来判断这个问题。
标签: c++ coding-style