在特定位置将字符串添加到字符数组,从而在 C 编程中导致缓冲区溢出

adding string to character array at specific position giving buffer overflow in c programming

我是 c 编程的新手,为了完成一项学校作业,我需要编写一个程序,将字符串作为输入,并在每个以辅音字母开头的单词前添加字母“ay”单词。暗示这应该用 strncpy 和 strcat 来完成。

这是我写的代码:

    #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]!='[=10=]'; 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] = '[=10=]';
                        strcat(myString, strC);
                        strC[0] = '[=10=]';
                        strB[0] = '[=10=]';
                    }
                }
            }
        }
        printf("Result: %s", myString);
    }

当我 运行 这段代码时,它一直给出错误 * Buffer overlow detected *: /home/a.out terminated。我找不到我犯的错误。希望有人能帮助我。 谢谢

改变这个:

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

对此:

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

因为 %[^\n] 转换修饰符不是 %s 的修饰符,它们是独立的。因此,您可以丢弃它。


提示:添加数组的大小 - 1,以防止可能的缓冲区溢出,如下所示:scanf(" %49[^\n]", myString);