p周围的堆栈已损坏c ++

时间:2013-04-17 15:54:35

标签: c++ string char

一定很简单,但我现在很麻木,想清楚。 所以这只是我代码的一小部分,除此之外一切正常。 我真正想做的是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];
    }
}

3 个答案:

答案 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