char *newString=malloc(sizeof(str) * sizeof(char));
Поскольку str
- это const char *
, sizeof(str)
- это количество байтов, которое const char *
занимает на вашей платформе. Это не то, что вы хотите. То, что вы хотите передать в malloc
, это длина строки, которую вы хотите сохранить, оставив дополнительный байт для завершающего нуля. В данном случае это (strlen(str) + 1)
.
newString = (char *)realloc(newString, stringLength(newString)*sizeof(char) + sizeof(char));
Это, вероятно, также неправильно. Вам нужно (strlen(newString) + 2)
, чтобы оставить один байт для вновь добавленного символа и один байт для нулевого терминатора. Хотя трудно быть уверенным, потому что я не могу сказать, что делает ваша функция stringLength
.
Также sizeof(char)
по определению равен единице. Функция sizeof
возвращает размер в символах.
Гораздо проще понять strlen(newString) + 2
, чем stringLength(newString)*sizeof(char) + sizeof(char)
, потому что strlen
- стандартная функция, а sizeof(char)
- многословно и безобразно. Поэтому я настоятельно рекомендую изменить это значение на strlen(newString) + 2
.