1

这一定很简单,但我现在已经麻木地想清楚了。所以这是我代码的一小部分,除此之外一切正常。我真正想做的是 infile1.open(temp2->path); 但这是不可能的,因为 temp2 是一个字符串。所以我想把这个字符串放入一个像 char p[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];
    }
}
4

3 回答 3

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. 但是我们不要太详细地讨论它,因为无论如何你都不应该这样做。

于 2013-04-17T15:56:01.013 回答
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 个字符或更多字符,那么困难的方法将会失败。

于 2013-04-17T15:57:04.050 回答
1

你可以简单地做:

 infile1.open(temp2->path.c_str());

堆栈损坏发生在您的stringToCharArray函数内部。

for( i=0; i<=size ; i++)
            //^^^should not reach size-1, equal redundant
于 2013-04-17T15:57:44.897 回答