Добавление строки в массив символов в определенной позиции, дающей переполнение буфера в программировании на c

Я очень плохо знаком с программированием на 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]!='\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 прекращено. Я не могу найти ошибку, которую я сделал. Надеюсь, кто-нибудь может мне помочь. Спасибо

1 ответ

Решение

Изменить это:

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

к этому:

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

поскольку %[^\n] модификатор преобразования не является модификатором для %sони независимы. В результате вы можете отказаться от него.


Совет: добавьте размер вашего массива - 1, чтобы предотвратить возможное переполнение буфера, например так: scanf(" %49[^\n]", myString);

Другие вопросы по тегам