C++ 无法获取C++;函数使用来自用户的字符串

C++ 无法获取C++;函数使用来自用户的字符串,c++,string,crash,char,cin,C++,String,Crash,Char,Cin,请帮忙 我有一个调用头文件中函数的程序 #include <iostream> #include "md5.h" #include <string> using namespace std; int main(){ string x; char* v_MD5String; MD5 md5 ; v_MD5String = "Hello World"; x = puts(md5.digestString(v_MD5String)); cout <<

请帮忙

我有一个调用头文件中函数的程序

#include <iostream>
#include "md5.h"
#include <string>
using namespace std;

int main(){
 string x;
 char* v_MD5String;
 MD5 md5 ;
 v_MD5String = "Hello World";
 x = puts(md5.digestString(v_MD5String));
 cout << x;
 return 0;}
但是,当我使用它编译的用户的输入时,上面的方法是有效的,但是运行崩溃,没有任何错误

在程序中,这是更改的:

v_MD5String = "Hello World";
为此:

cin >> v_MD5String;
我该怎么做才能让它工作


谢谢。

因此,如果我理解正确,您在头文件中声明了以下函数,无法修改:

char* digestString( char *string );
您首先应该知道,这是一种值得怀疑的编码风格。函数采用
char*
而不是
char const*
,这意味着传递的数据发生了更改,但它也返回了一些内容。我不得不仔细研究你链接的页面上发布的实现,发现
string
实际上是一个输入参数,因此作者忘记了使用
const
,而且数据也不会被更改

(数据不会被修改至少是我的假设基于肤浅的代码分析和一些编译测试。你应该让作者确认一下!)

如果你在C++中使用这个函数,你的第一个任务应该是提供一个更安全、易于理解的包装函数,它使用真实的C++字符串(类),而不是C字符串(它恰好是完全未封装的指针,指向内存中的字符,在C世界中是好的,而C++中没有)。您已经在程序中使用了一个

std::string
。那很好。现在更多地使用它:

std::string SafeDigestString(MD5 &md5, std::string const &input)
{
    // the input of digestString will never be modified:
    return md5.digestString(const_cast<char *>(input.c_str()));
}
我们已经为实现用户输入奠定了基础,最好使用
std::getline
函数:

int main()
{
    MD5 md5;
    std::string input;
    std::getline(std::cin, input);
    std::string result = SafeDigestString(md5, input);
    std::cout << result << "\n";
}
intmain()
{
MD5-MD5;
std::字符串输入;
std::getline(std::cin,输入);
std::string result=SafeDigestString(md5,输入);

STD::CUT:这是C++。使用String > STD::String < /Cord>。您正在传递一个<代码>字符串文字< /代码>“Hello World”作为参数。如果这些函数中的任何一个试图更改该字符串,则程序的行为是未定义的。只是在“代码>更新< /Cuff>函数中进行编译,以便使编译器关闭”。这表明您试图愚弄编译器,使其认为字符串是可修改的。另外,为什么
digestString
函数中的参数名为
string
?这不是有点令人困惑吗?这不是我的代码。我正在使用其他人的头代码,并在那里修改工作程序,以从m用户。更改为使用用户输入是不起作用的部分。感谢使用
cin>>v_MD5String;
应分配变量
int main()
{
    MD5 md5;
    std::string result = SafeDigestString(md5, "Hello World");
    std::cout << result << "\n";
}
int main()
{
    MD5 md5;
    std::string input;
    std::getline(std::cin, input);
    std::string result = SafeDigestString(md5, input);
    std::cout << result << "\n";
}