一定很简单,但我现在很麻木,想清楚。 所以这只是我代码的一小部分,除此之外一切正常。 我真正想做的是infile1.open(temp2-> path);但由于temp2是一个字符串,所以不可能。所以我想将这个字符串放入char数组[100]中的char数组中,以使用infile1.open(p)。它编译但经过几秒钟的繁荣:p周围的堆栈已损坏
char p[100];
while( temp2 != 0)
{
stringToCharArray(temp2->path, p);
infile1.open(p);
checkingWords(infile1, stopWords, invertedIndex);
infile1.close();
temp2 = temp2->next;
}
void stringToCharArray(string s, char *c)
{
int i;
int size = s.size();
for( i=0; i<=size ; i++)
{
c[i] = s[i];
}
}
答案 0 :(得分:6)
我相信你想要std::string::c_str
。
infile1.open(temp2->path.c_str());
(请注意,此const char *
仅在您下次更改std::string
中的某些内容时才有效,在本例中为temp2->path
}。
现有代码的主要错误for( i=0; i<=size ; i++)
应该是i<size
。但是,我们不要过多地详述,因为你不应该这样做。
答案 1 :(得分:2)
你可以轻松地做到这一点
infile1.open(temp2->path.c_str());
但你的努力方式应该是这样的
void stringToCharArray(string s, char *c)
{
int i;
int size = s.size();
for( i=0; i<size ; i++) // < not <=
{
c[i] = s[i];
}
c[size] = '\0';
}
当然,如果您的字符串恰好是100个字符或更多字符,那么困难的方法就会失败。
答案 2 :(得分:1)
您可以这样做:
infile1.open(temp2->path.c_str());
堆栈损坏发生在stringToCharArray
函数中。
for( i=0; i<=size ; i++)
//^^^should not reach size-1, equal redundant