Вы сказали:
... и поправьте меня, если я ошибаюсь, но я верю в функцию и только в функцию, если бы у вас были некоторые func (char x []) и char func (char * x), они были бы одинаковыми вещь? Таким образом, вы можете смотреть на них обоих как на массив символов. Если бы это было вне определения функции char x []; будет массивом char и char * x; будет указатель.
Было бы лучше рассматривать их как указатели (а не как массивы) внутри функции, но у вас есть ключевой момент - в списках аргументов функции различия между массивами и указателями размыты, но в других местах указатели и массивы разные.
В коде, поскольку предполагается, что itoa()
возвращает целое число при отсутствии информации об обратном, вы не можете сохранить это в указателе или в качестве указателя (без использования кувалды, что приведет к повреждению вашего кода ).
Что возвращает itoa()
? Это не стандартная функция C (как, ни в ISO / IEC 9899: 1999, ни в POSIX). Википедия предполагает, что он не возвращает значения, поэтому вам не следует нигде присваивать его значение. Linux имеет нестандартное расширение в <stdlib.h>
с другим интерфейсом, который возвращает char *
(что является значением его второго аргумента). Вы можете смело игнорировать возвращаемое значение; на самом деле, вы также можете выполнить назначение (после включения заголовка), но назначение не разрешено. Вам нужно знать, что функция нестандартна, что у нее есть множество определений, и поэтому вы должны знать, что подходит для вашей платформы, или избегать ее использования (возможно, с помощью snprintf()
вместо).
Цитирование связанной страницы руководства Linux:
char* itoa (int __val, char * __s, int __radix)
Преобразовать целое число в строку.
Функция itoa () преобразует целочисленное значение из val в представление ASCII, которое будет храниться в s. Вызывающий отвечает за обеспечение достаточного хранения в с.
Примечание:
Минимальный размер буфера s зависит от выбора radix. Например, если основание равно 2 (двоичное), вам нужно предоставить буфер с минимальной длиной 8 * sizeof (int) + 1 символов, то есть один символ для каждого бита плюс один для ограничителя строки. Использование большего радиуса потребует меньшего минимального размера буфера.
Внимание:
Если буфер слишком мал, вы рискуете переполнить буфер.
Преобразование выполняется с использованием основание радиуса, которое может быть числом от 2 (двоичное преобразование) до 36. Если основание больше 10, следующей цифрой после «9» будет буква «а».
Если основание равно 10, а значение val отрицательно, знак минус будет добавлен.
Функция itoa () возвращает указатель, переданный как s.
Вы не хотите использовать n+1
как основание.