Добавление строки в массив символов в определенной позиции, дающей переполнение буфера в программировании на 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);