2017-10-20 36 views
0

我對c編程非常陌生,對於學校作業,我需要編寫一個程序以字符串作爲輸入並將字母「ay」添加到每個詞都以這個單詞前面的輔音開頭。據暗示,這應該用strncpy和strcat來完成。將字符串添加到特定位置的字符數組在c編程中給出緩衝區溢出

這是我寫的代碼:

#include <stdio.h> 
    #include <string.h> 

    int main() 
    { 
     char myString[50]; 
     char abc[26] = "bcdfghjklmnpqrstvwxyz"; 
     char strA[50]; 
     char strB[50]; 
     char strC[150]; 
     char ay[3] = "ay"; 
     printf("** Welcome to the Double Dutch game **\nPlease enter a string: "); 
     scanf(" %[^\n]s", &myString); 
     int i, j; 
     for (i=0; myString[i]!='0'; i++) { 
      for(j=0; abc[j]!='\0'; j++) { 
       if(abc[j] == myString[i]){ 
        if(myString[i-1] == ' '){ 
         strncpy(strC, &myString[0], i); 
         strncpy(strB, &myString[i], 40); 
         strcat(strC, ay); 
         strcat(strC, strB); 
         myString[0] = '\0'; 
         strcat(myString, strC); 
         strC[0] = '\0'; 
         strB[0] = '\0'; 
        } 
       } 
      } 
     } 
     printf("Result: %s", myString); 
    } 

當我運行這段代碼它一直給錯誤*緩衝區過低檢測*:/home/a.out終止。我找不到我犯的錯誤。希望有人能幫助我。 感謝

+0

變化'炭ABC [26] = 「bcdfghjklmnpqrstvwxyz」;'到'炭ABC [ ] =「bcdfghjklmnpqrstvwxyz」;' - 讓編譯器做腿部工作 –

+0

'scanf(「%[^ \ n] s」,&myString);' - >刪除'&' –

+1

如果第一個字符字符串是輔音? 'i'將爲0,並且這個'if(myString [i-1] =='')'檢查將超出界限。 –

回答

0

更改此:

scanf(" %[^\n]s", &myString); 

這樣:

scanf(" %[^\n]", myString); 

因爲%[^\n]轉換修飾符是不是%s改性劑,它們是獨立的。因此,您可以放棄它。


提示:添加您的陣列的大小 - 1,以防止可能的緩衝器溢出,這樣的:scanf(" %49[^\n]", myString);

相關問題