我有一个任务,我必须从命令行读取3个文本文件(它们都是一行长),并将它们转换为字符串。我怎么能这样做?我试过这样做:
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
int main (int argc, char *argv[])
{
string mouse_dna = argv[1];
string human_dna = argv[2];
string unknown_dna = argv[3];
但我不认为这是正常的。另外,我必须确定每个字符串的长度,但是像这样使用strlen:
int len = strlen(mouse_dna);
只返回一个错误,说“无法将'std :: string {aka std :: basic_string}'转换为'const char *',参数'1'为'size_t_strlen(const_char *)'
我非常感谢任何帮助!!谢谢!
答案 0 :(得分:2)
strlen()
用于查找C风格字符串的长度。您正在使用C ++字符串,所以这样做:
size_t mouse_len = mouse_dna.length(); // or .size(), same thing
答案 1 :(得分:0)
你需要做的是这样的事情:
String mouse_dna = new String();
for (int i = 0; argv[1][i] != 0; i++) mouse_dna += argv[1][i];
当然,您需要检查argc&gt; = 3。
答案 2 :(得分:-1)
文本文件在哪里以及何时将它们放入数组中?为什么在将命令行文件转换为字符串时使用strlen()甚至不起作用? strlen()如何帮助?请告诉我我想要修复什么?非常混乱没有帮助...
//编辑
我找到了你的问题。 argv [1]为NULL,当您尝试将其放入std :: string
时会出现此错误在抛出&#39; std :: logic_error&#39;的实例后终止调用 what():basic_string :: _ S_construct null无效
代码 -
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
int main (int argc, char *argv[])
{
if(argc > 1)
{
string mouse_dna = argv[1];
string human_dna = argv[2];
string unknown_dna = argv[3];
cout << mouse_dna;
cout << human_dna;
cout << unknown_dna;
}
return 0;
}
只要一个argv [1]不等于NULL,它就可以解决了。
http://ideone.com/keEtwl - 检查我的代码和错误消息