2017-10-20 76 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);