Поэтому я использую следующий код, в котором функция вызывает выглядит следующим образом (обратите внимание на строку буквальную):Malloc изменение значения другого переменного (символ *)
rmv_zeros("288230376151711744000000", '0', '-');
Вот код:
char* rmv_zeros(char *result, char base_0, char minus)
{
char* formatted;
formatted = malloc(sizeof(char) * (strlen(result) + 1));
if (result[0] == base_0 || (result[1] == base_0 && result[0] == minus))
{
if (if_rmv_zeros_needed(result, formatted, base_0, minus) == char_to_str(base_0))
{
return char_to_str(base_0);
}
else
{
return if_rmv_zeros_needed(result, formatted, base_0, minus);
}
}
else
{
return result;
}
return formatted;
}
Код не войдет в первый оператор if
, следовательно, он войдет в else
(я увидел, что отладка wile).
Но оно вернет 2882303761517117440000001
, добавив '1'
в самом конце результата.
Однако, когда я комментирую строку malloc() (пятая строка в этом примере), возвращаемое значение равно 288230376151711744000000
, что является значением input'd и логическим возвратом.
Любая помощь по этому вопросу?
Спасибо,
EDIT: Ввод printf("%s\n", result)
на 3-й линии и в 19 на самом деле «» исправлениями «» (не цитаты, я знаю, что это не реальное исправление) проблема. Зачем?
Кроме того, он возвращает 'NULL' при ошибке. Возможно, вы захотите проверить это вместо того, чтобы предполагать и иметь ошибку сегментации без каких-либо хороших объяснений. –
Вы должны изменить порядок проверок в 'result [1] == base_0 && result [0] == минус'. В настоящее время у вас есть доступ с ограниченным доступом для 'rmv_zeros (" ", '0', '-')' –
Sourav Ghosh: Объясните свою точку зрения. Если я спрошу, что это ясно, потому что я ничего не понимаю, и вы не помогаете. iharob: У меня есть функция проверки, но я решил заменить ее на malloc, поэтому мне легче понять код. Werner: Благодарим за это, реализуя его сейчас. – Greg01re