p周围的栈被c++破坏了

Stack around p was corrupted c++

本文关键字:c++ 坏了 周围      更新时间:2023-10-16

这一定很简单,但我现在太麻木了,无法清晰地思考。这是我代码的一小部分除了这个,其他都很好。我实际想做的是infile1.open(temp2->path);但这是不可能的,因为temp2是一个字符串。所以我想把这个字符串放入char数组中,如char p[100],以使用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];
    }
}

我相信你想要std::string::c_str

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

(要小心,这个const char *只有在下次你改变std::string中的某些东西时才有效,在这种情况下是temp2->path)。

看起来你现有代码的主要错误是for( i=0; i<=size ; i++)应该是i<size。不过我们还是不要太详细了,因为你不应该这么做

你可以用最简单的方法

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

但是你的hard way应该是这样的

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] = '';
}

当然,如果您的字符串恰好是100个字符或更多,那么困难的方法将会失败。

你可以这样做:

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

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

for( i=0; i<=size ; i++)
            //^^^should not reach size-1, equal redundant