Конвертировать числа с помощью toString в Ansi C - PullRequest
2 голосов
/ 17 февраля 2010

Можно ли использовать оператор toString или как преобразовать числа в массивы символов.

Ответы [ 3 ]

4 голосов
/ 17 февраля 2010
int myNumber = 27; /* or what have you */
char myBuffer[100];
snprintf(myBuffer, 100, "%d", myNumber);

Есть несколько соображений, о которых вам следует подумать. Кто обеспечивает память для хранения строки? Как долго вам это нужно и т.д.? (Выше это буфер стека в 100 байтов, что намного больше, чем необходимо для любого целочисленного значения, которое будет напечатано.)

Лучший ответ: начать использовать Java. Или Javascript, или C #, или ради любви к Богу почти все, кроме C. Так лгут только тигры.

2 голосов
/ 17 февраля 2010

sprintf() считается небезопасным, поскольку это может привести к переполнению буфера. Если он доступен (и на многих платформах он есть), вместо него следует использовать snprintf(). Рассмотрим следующий код:

#include <stdio.h>
int main()
{
    int i = 12345;
    char buf[4];
    sprintf(buf, "%d", i);
}

Это приводит к переполнению буфера. Таким образом, вам необходимо перераспределить буфер до максимального размера (в виде строки) int, даже если вам требуется меньше символов, поскольку у вас есть возможность переполнения. Вместо этого, если бы вы использовали snprintf(), вы могли бы указать количество символов для записи, и любое значение больше этого числа будет просто обрезано.

#include <stdio.h>
int main()
{
    int i = 12345;
    char buf[4];
    snprintf(buf, 4, "%d", i);
    //truncates the string to 123
}

Обратите внимание, что в любом случае вы должны позаботиться о том, чтобы выделить достаточно места в буфере для любого допустимого вывода. Просто snprintf() предоставляет вам страховочную сетку на случай, если вы еще не рассмотрели тот крайний случай, когда ваш буфер мог бы переполниться.

2 голосов
/ 17 февраля 2010

Используйте функцию sprintf().

...