无法让c++函数使用来自用户的字符串
Cannot Get C++ Function to Use String from User
请帮忙。
我在这里有一个程序,它在头文件中调用一个函数。
#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;}
调用的函数:
char* digestString( char *string ){
Init() ;
Update( (unsigned char*)string, strlen(string) ) ;
Final() ;
return digestChars ;}
上面的工作,但是当我使用来自用户的输入时,它编译,但是运行崩溃,没有任何错误。
在程序中,这被改变了:
v_MD5String = "Hello World";
:
cin >> v_MD5String;
我该怎么做才能让它工作?
谢谢。
所以,如果我理解正确的话,你在头文件中声明了以下函数,你不能修改:
char* digestString( char *string );
您首先应该知道这是有问题的编码风格。该函数接受char *
而不是char const *
,这意味着传递的数据是更改的,但它也返回一些东西。我不得不在你链接的页面上发布的实现中挖掘,发现string
实际上是一个输入参数,因此作者只是忘记了使用const
,数据无论如何都不会改变。
(不打算修改的数据至少是我的假设根据肤浅的代码分析和一些编译测试。你应该问作者是否真的确定!)
如果你在c++中使用这个函数,你的第一个任务应该是提供一个更安全,易于理解的包装函数,它使用真正的c++字符串(std::string
类),而不是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()));
}
const &
和参数名都清楚地表明我们正在处理输入。
请注意,我使用const_cast<char *>
将std::string
的c兼容数据表示(即char const *
)传递给digestString
函数。这是一个罕见的情况下,const_cast
是合适的;这也是一个典型的例子,即弥补在其他代码中必须使用的const
声明的缺点。如果MD5
类中的所有函数都正确地声明了它们的输入参数const
,那么就不需要const_cast
了。
还请注意,我只是在每个std
标识符前加上std::
,而不是using namespace std
。这通常是更好、更简单、更一致的选择。
现在我们有了安全的c++机制,main
变得非常简单:
int main()
{
MD5 md5;
std::string result = SafeDigestString(md5, "Hello World");
std::cout << result << "n";
}
我们已经为实现用户输入奠定了基础,这最好使用std::getline
函数来完成:
int main()
{
MD5 md5;
std::string input;
std::getline(std::cin, input);
std::string result = SafeDigestString(md5, input);
std::cout << result << "n";
}
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 使用用户定义函数的字符串反转
- 如果用户输入无效,如何使用字符串变量-C++重复输入命令
- 用户输入字符串的文件附加问题..C++
- 从用户定义的类生成格式字符串?
- 我如何使它,无论用户用空白字符串按 Enter 多少次,它总是打印"开始"字符串?
- C++ - 使用用户输入的字符串数据检查结构字符串数据(无限执行 while 循环)
- 如何计算字符串中用户输入元素的出现次数?
- 是否可以创建一个用户定义的文本,将字符串文本转换为 own 类型的数组?
- 如何使用用户输入创建字符串队列?
- 正在尝试将用户输入传递到字符串(C++)中
- 将用户输入从 editLine 记录到字符串数组
- 是否可以用类似C/C++(或任何语言)的语言,从作为用户输入的字符串或文件中创建用户定义的数据类型
- 如何删除用户输入字符串末尾的空字符?
- C++代码,用于在用户插入的字符串的每个元音之后插入一对字符
- 用户输入字符串的结构的搜索向量
- 有没有办法通过作为用户输入的字符串来创建类实例名称?
- 在读取数据文件时,如何找到用户字符串输入的字谜?
- 如何将GUI用户字符串输入转换为使用C++库函数的格式
- 如何将用户字符串输入存储在数组中,C++