Я хочу иметь возможность передать строку в функцию, которая принимает массив символов, которые образуют строку, и заменяет ее на другую предоставленную строку.Проблема в том, что я получаю сообщение об ошибке, сообщающее, что перераспределяемый указатель (с использованием realloc) не был выделен (с помощью malloc).
Я убедился, что используемый в функции указатель такой же, какодин используется в основной подпрограмме, как показано в инструкциях печати указателя.Я пытался не передавать адрес строки массива char, но только сам по себе.Ничего из этого не сработало.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void change(char **old_string, char *new_string);
int main(int argc, char *argv[]) {
if (argc == 2) {
char *string;
string = malloc((strlen(argv[1]) + 1) * sizeof(char)); // + 1 for \0
string = argv[1];
printf("Pointer outside Function: %p\n", string);
printf("String Before: %s\n", string);
change(&string, "New String");
printf("String After: %s\n", string);
} else {
printf("Please enter a string to have changed.\n");
}
return 0;
}
void change(char **old_string, char *new_string) {
printf("Pointer in Function: %p\n", *old_string);
*old_string = realloc(*old_string, (strlen(new_string) + 1) * sizeof(char)); // + 1 for \0
strcpy(*old_string, new_string);
}
Текущие результаты при запуске:
Указатель снаружи Функция: 0x7ffeed590c88 String Before: тест Указатель в функции: 0x7ffeed590c88 a.out (20309,0x111496d40) malloc: * ошибка для объекта 0x7ffeed590c88: указатель, являющийся realloc'd, не был выделен a.out (20309,0x111496d40) malloc: * установить точку останова в malloc_error_break для отладки прерывания прерывания: 6
Чтодолжно произойти:
Для функции должны быть предоставлены две строки.Первый аргумент - это указатель на символы, а второй - строковый литерал.Указатель на предоставленные символы должен использоваться в основной процедуре.