У меня есть упражнения, которые я определяю 2 строки и некоторые цифры (место в строке), что мне нужно скопировать вторую строку в первую, но из N места (пример: "Привет" "Мир«3 будет« HeWorldllo »).
Функции:
char* Dynamic_allocation() {
char *string = (char*)malloc(sizeof(char));
char ch = '\0';
int i = 1;
while (ch != '\n') {
scanf("%c", &ch);
string[i - 1] = ch;
i++;
string = (char*)realloc(string, i * sizeof(char));
}
string[i - 2] = '\0';
return string;
}
void Copy_string(char* str) {
char *str2, *tmp;
int N, Bytes = 0;
tmp = str;
printf("Enter one more string \n");
str2 = Dynamic_allocation();
printf("Enter from which place you would like to start copying \n");
scanf("%d", &N);
str = (char*)realloc(str, (strlen(str) + strlen(str2) + 1) * sizeof(char));
tmp = &str[N-1];
while (*tmp) {
Bytes++;
tmp++;
}
memmove(&str[N-1+strlen(str2)], &str[N - 1], (Bytes+1) * sizeof(char));
for (int i = 0; i < strlen(str2); i++) {
str[N - 1 + i] = str2[i];
}
printf("%s \n", str);
free(str2);
}
Main:
int main() {
char *string;
printf("Enter a string and press ENTER \n");
string = Dynamic_allocation();
Copy_string(string);
free(string);
return 0;
}
Когда я введу« abc »« 123 »и 2 дляпример все работает нормально, но когда я ввожу "ab", "12" и 2, результат печатается нормально, но я получаю сообщение об ошибке при освобождении первой строки в главном (_CrtIsValidHeapPointer (block)).