2015-03-27 2 views
0

Как вы помещаете int в массив символов?Создать массив массивов из int в C

int x = 21, i = 3; 
char length[4]; 

while(i >= 0) { 
    length[i] = (char) (x % 10); 
    x /= 10; 
    i--; 
} printf("%s\n", length); 

// length should now be "0021" 

Вместо этого строка получается пустой.

Примечание: Это не дубликат «Как преобразовать из int в символы в C++?» потому что мне также нужно заполнить. то есть «0021» не «21»

+0

Что вы пытаетесь сделать? -> 'snprintf (длина, размер (длина),"% d ", x);'? –

+0

Возможный дубликат [Как преобразовать из int в символы в C++?] (Http://stackoverflow.com/questions/4355315/how-do-i-convert-from-int-to-chars-in-c) – MuertoExcobito

+0

@MuertoExcobito где C++? –

ответ

6

Вы не получаете код символа цифры, вы используете цифру, как если бы это был ее собственный код символа. Оно должно быть:

length[i] = '0' + (x % 10); 

Кроме того, необходимо добавить дополнительный элемент к length массива для завершающего нулевого символа:

char length[5]; 
length[4] = 0; 
+0

Спасибо, это сработало. Я приму ответ, когда позволю. :) – Dobz

+0

Не должно быть 'length [4] = '\ 0';'? –

+3

Они то же самое. – Barmar

2

Проблема в коде, в основном, что 1 != '1' т.е. символ не является целое число, вам нужно проверить таблицу ascii, чтобы увидеть, какой код ascii представляет символ '1', но вам действительно не нужно знать номер, вы можете просто использовать '1' отметить однократные qoutes.

Но вы также не nul прекратить вашу строку, вам нужно добавить '\0' в конце строки, так

int x = 21, i = 3; 
char length[5]; 

length[4] = '\0'; 
while (i >= 0) 
{ 
    length[i--] = x % 10 + '0'; 
    x   /= 10; 
} 
printf("%s\n", length); 

должен работать, но это ненужное, вы можете просто

snprintf(length, sizeof(length), "%0*d", padding, x); 
/*          ^this is how many characters you want */ 

Обратите внимание, что sizeof работает, потому что length - массив char, не путайте это с длиной строки.

Смежные вопросы