2013-04-17 78 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