将字符串转换为字符**
Converting string to char**
>我的代码有问题,我不知道出了什么问题:(
我想将字符串转换为 char* 数组并在最后打印出来。
输出目前是我输入的句子最后一个单词的 3 倍。
void parse(std::string &s, char **argv)
{
std::istringstream iss(s);
std::string tmp;
while(iss >> tmp)
{
*argv++ = (char*) tmp.c_str();
}
}
int main()
{
std::string input;
while (1)
{
std::getline(std::cin, input);
int argCount = countArgs(input);
char *argv[argCount];
parse(input, argv);
for(int i=0; i<argCount; ++i)
{
std::cout << argv[i] << std::endl;
}
}
return 0;
}
我不会详细说明为什么您当前的代码不起作用,因为您正在做的事情基本上不是真正安全/良好/理智的事情。请重新考虑您的方法。
如果您可以使用string
,为什么要使用char*
?
如果可能,而不是
char *argv[argCount];
...
void parse(std::string &s, char **argv)
...
*argv++ = (char*) tmp.c_str();
用
string argv[argCount];
...
void parse(std::string &s, string* argv)
...
*argv++ = tmp;
它将与您现在的工作方式几乎相同,"只是"使用不同的数据类型。
但是,请注意,这一切仍然不会真正C++,因为您正在使用带有非常量argCount
的string argv[argCount];
。我很惊讶你的编译器实际上编译了它,你一定使用了一些 C 合规性编译标志。您应该使用 std::vector
或 std::list
来保留"可变长度数组"。
您可以通过在保存char *
之前调用strdup()
来避免注释中提到的问题:
void parse(std::string &s, char **argv)
{
std::istringstream iss(s);
std::string tmp;
while(iss >> tmp)
{
*argv++ = strdup( tmp.c_str() );
}
}
稍后您需要释放(而不是delete()
)这些副本。
for (int i = 0; i < argCount; ++i)
{
std::cout << argv[i] << std::endl;
free( argv[i] );
}
相关文章:
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 尝试将字符串/字符转换为整数会产生意外结果
- 如何使用C++将字符串中的字符转换为整数变量
- 字符转换功能 std::isupper() & std::islower() C++17
- 将字符 * 转换为字符串 *
- 在编译时将常量字符* 转换为常量 char_type*
- 如何在 C/C++ 中将无符号字符*转换为无符号字符数组?
- 错误:请求从"常量字符 [5]"转换为非标量类型"字符串"
- 无法使用字符串流将字符转换为字符串C++
- 将无符号字符 C++ 转换为 C#
- C++:使用没有位移位的指针将无符号字符转换为无符号 int
- 为什么我可以隐式地将字符*转换为常量字符*,但不能将无符号字符*
- 无法<string>从"常量字符 []"转换为<类名>
- 不能将字符转换为整数吗?
- 编译时将字符*转换为字节
- CP1251:从字符* 转换为 wchar_t* 时的编码失真
- 将单个字符转换为 std::string 前缀 \x01
- PPM 将字符转换为 int 授予负数
- 通过像printf这样的可变参数函数传递一个带有常量字符*转换函数的类
- 将常量字符* 转换为字符时出错