这有点难,我想不出来。
我有一个int和一个string,需要将它们存储为char*,其中int必须是十六进制的。
例如:
int a = 31;
string str = "a number";
我需要将两个字符串用制表符分隔后放入char*中。
输出应该像这样:
1F a number
使用适当的包含文件:
#include <sstream>
#include <ostream>
#include <iomanip>
类似这样:
std::ostringstream oss;
oss << std::hex << a << '\t' << str << '\n';
从中复制结果:
oss.str().c_str()
c_str
的结果是一个临时的 const char*
,因此如果您的函数需要 char *
,您需要在其他地方分配可变的副本。(可以将其复制到 std::vector<char>
中。)试试这个:
int myInt = 31;
const char* myString = "a number";
std::string stdString = "a number";
char myString[100];
// from const char*
sprintf(myString, "%x\t%s", myInt, myString);
// from std::string :)
sprintf(myString, "%x\t%s", myInt, stdString.c_str());
const char *
开始,改用std::string
。 - David Thornley#include <stdio.h>
char display_string[200];
sprintf(display_string,"%X\t%s",a,str.c_str());
我使用了sprintf来将您的数字转换为十六进制格式。
char*
,因此sprintf
并不是那么不必要! - Jacobsprintf
函数。而且自从什么时候在C++代码中使用C库函数违法了? - Michael Kristofiksnprintf()
而不是sprintf()
。 - Michael Burrstr.c_str()
会返回以 null 结尾的 C 字符串。
注意:由于您的评论表明回答主要问题不必要,因此本文不涉及主要问题。
那些写下 "const char* myString = "a number";" 的人只是糟糕的程序员。他们没有掌握 C 基础知识,就匆忙进入 C++ 并开始谈论他们根本不理解的事情。
"const char *" 类型是一个指针。"a number" 是数组。你混淆了指针和数组。是的,C++ 编译器有时允许鸭子类型。但你必须明白 - 如果你不理解你的“鸭性”在哪里,所有的程序都只是一卷胶带。