我正在尝试编写一个在数组中存储字符串的代码。我正试图用char *做,但我无法实现。我在网上搜索但找不到答案。我已经尝试了下面的代码,但它没有编译。我使用字符串流,因为在某些时候我需要将字符串与整数连接。
stringstream asd;
asd<<"my name is"<<5;
string s = asd.str();
char *s1 = s;
答案 0 :(得分:4)
&GT;我正在尝试编写一个在数组中存储字符串的代码。
嗯,首先你需要一个字符串。我不喜欢使用裸阵列,因此我使用std::vector
:
std::vector<std::string> myStrings;
但是,我知道你必须使用一个数组,所以我们将使用一个数组:
// I hope 20 is enough, but not too many.
std::string myStrings[20];
int j = 0;
&GT;我使用字符串流因为......
好的,我们将使用stringstream:
std::stringstream s;
s << "Hello, Agent " << 99;
//myStrings.push_back(s.str()); // How *I* would have done it.
myStrings[j++] = s.str(); // How *you* have to do it.
这会让我们一个字符串,但你想要一个数组:
for(int i = 3; i < 11; i+=2) {
s.str(""); // clear out old value
s << i << " is a" << (i==9?" very ":"n ") << "odd prime.";
//myStrings.push_back(s.str());
myStrings[j++] = s.str();
}
现在你有一个字符串数组。
完整,经过测试的程序:
#include <sstream>
#include <iostream>
int main () {
// I hope 20 is enough, but not too many.
std::string myStrings[20];
int j = 0;
std::stringstream s;
s << "Hello, Agent " << 99;
//myStrings.push_back(s.str()); // How *I* would have done it.
myStrings[j++] = s.str(); // How *you* have to do it.
for(int i = 3; i < 11; i+=2) {
s.str(""); // clear out old value
s << i << " is a" << (i==9?" very ":"n ") << "odd prime.";
//myStrings.push_back(s.str());
myStrings[j++] = s.str();
}
// Now we have an array of strings, what to do with them?
// Let's print them.
for(j = 0; j < 5; j++) {
std::cout << myStrings[j] << "\n";
}
}
答案 1 :(得分:2)
这样的事情怎么样?
vector<string> string_array;
stringstream asd;
asd<<"my name is"<<5;
string_array.push_back(asd.str());
答案 2 :(得分:1)
char *s1 = s;
是非法的。你需要:
const char *s1 = s.c_str();
如果您未设置char*
,或者您需要分配新的char*
并使用strcpy
复制字符串中的内容。
答案 3 :(得分:0)
只需将代码更改为
即可char const* s1 = s.c_str();
因为指向char的指针不能存储字符串对象,只有指向char的指针,这是c_str()返回的指针。
答案 4 :(得分:0)
我不会直接使用char *。我会把它包装在下面的模板中。您可以覆盖执行任何其他操作所需的运算符(例如,我将使数据成为私有成员,并覆盖运算符以使数据打印干净)。我做了赋值运算符只是为了演示可以创建代码的干净程度。
#include "MainWindow.h"
#include <stdio.h>
using namespace std;
template<size_t size>
class SaferChar
{
public:
SaferChar & operator=(string const & other)
{
strncpy(data, other.c_str(), size);
return *this;
}
char data[size];
};
int main(int argc, char *argv[])
{
SaferChar<10> safeChar;
std::string String("Testing");
safeChar = String.c_str();
printf("%s\n", safeChar.data);
return 0;
}