2015-06-24 89 views
-3

我得到這個錯誤:錯誤:圍繞堆棧變量 'PTEMP' 被損壞

(Stack around the variable 'ptemp' was corrupted.)

我的代碼

list crea_lista(list l, FILE *fp, FILE *fp2){ 

    char ptemp[11]; 
    char ptemp2[11]; 
    element el; 
    el.numero_volte=1; 

    while(!feof(fp)){ 

     fscanf(fp,"%s",ptemp); 

     while(!feof(fp2)){ 

      fscanf(fp2,"%s",ptemp2); 

      if(strcmp(ptemp,ptemp2)==0){ 


       el.numero_volte=el.numero_volte+1; 


      } 

     } 

     strcpy(el.parola,ptemp); 
     l=insord(l,el); 
     el.numero_volte=1; 
     fflush(stdin); 

     rewind(fp2); 

    } 

    return l; 

} 

我怎樣才能解決這個問題?

+1

'while(!feof(fp)){'是反模式,[不使用它](http://stackoverflow.com/questions/5431941/why-is-while-feof-file-always-錯誤) –

+0

您可能導致緩衝區溢出;將'%s'更改爲'%10s'並重試。此外,'fflush(stdin)'會導致未定義的行爲,並且您沒有顯示'el.parola'是如何初始化的 –

回答

1

您用內存初始化了11個字符的ptemp。如果您從fp複製的字符串大於11個字符,則fscanf會將過去的ptemp寫入其他內存。 T修復,只複製11個字符或將ptemp的大小增加到正在讀取的字符串的最大大小(如果已知)。

+0

我已經解決,現在程序運行正確謝謝 –

+0

@RiccardoPirani如果答案解決了您的問題,請接受它通過點擊答案旁邊的勾號。如果您仍然有任何問題,請留下評論並在需要時編輯您的問題。 –

+0

謝謝,我已經解決了問題 –