2013-04-17 172 views
1

它一定很简单,但我现在很麻木,想清楚。 所以这是我的代码的一小部分一切正常,除了这一点。 我真正想要做的是infile1.open(temp2-> path);但这是不可能的,因为temp2是一个字符串。所以我想把这个字符串放入像char p [100]这样的字符数组来使用infile1.open(p)。它编译但经过几秒钟的繁荣:围绕p堆栈被损坏围绕p堆栈被损坏C++

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

您没有终止。你的路径是否超过99个字符? –

回答

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

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个字符失败或者更多。

1

你可以简单地做:你stringToCharArray函数内部发生

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

的堆栈损坏。

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