2014-11-21 5 views
1

Я искал по всему миру, и я ничего не могу найти. В настоящее время у меня есть целое число (int), и мне нужно его преобразовать в char* (NOT char[]). До сих пор я не могу заставить его работать. благодаряКак преобразовать int в строку (char *) в C

редактировать: Я попытался сделать следующее не повезло

int i = 8; 
char *charArray = i + '0'; 

редактировать 2: , как я новичок в C I, что я неправильно понял что-то здесь. В настоящее время я использую Pebble SDK (smart watch), и я пытаюсь преобразовать из int в строку, чтобы передать его в функции text_layer_set_text() Когда я использую формат: char *example = "4" мой код отлично работает. Хотя, независимо от того, каким образом я стараюсь не передать мой Интс в слое не так, как ожидалось

+1

Не могли бы вы привести пример (как вы пытаетесь это сделать, даже если это неправильно)? – bitcell

+0

Пожалуйста, покажите свою последнюю попытку, которая не удалась. – dasblinkenlight

+0

@Gopi 'char * example', конечно, не является строковым литералом. – unwind

ответ

1

Вопрос не ясен.

Если вы хотите char * как обобщенный указатель:

#include <stdio.h> 

int main(void) 
{ 
    int x = 5; 
    char *p = (char *)&x; 

    printf("%d\n", *(int *)p); 
    return 0; 
} 

Если вы хотите char * как строка:

#include <stdio.h> 
#include <stdlib.h> 

int main(void) 
{ 
    int x = 5; 
    char *p = malloc(32); 

    sprintf(p, "%d", x); 
    printf("%s\n", p); 
    free(p); 
    return 0; 
} 

EDIT:

Я использую галька (smartwatch sdk) и функция sprintf() - не поддерживается

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

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

int main(void) 
{ 
    char *p = malloc(32); 
    int i = 0, x = 5374; 
    int temp, len; 

    temp = abs(x); /* support for negatives */ 
    if (x < 0) p[i++] = '-'; /* support for negatives */ 
    do { 
     p[i++] = '0' + temp % 10; 
     temp /= 10; 
    } while (temp); 
    p[i] = '\0'; 
    if (x < 0) p++; /* support for negatives */ 
    len = strlen(p) - 1; 
    for(i = 0; i < len/2; i++) { 
     temp = p[len]; 
     p[len] = p[i]; 
     p[i] = temp; 
     len--; 
    } 
    if (x < 0) p--; /* support for negatives */ 
    printf("%s\n", p); 
    free(p); 
    return 0; 
} 
+0

спасибо за ответ. Я использую pebble (smartwatch sdk), и функция sprintf() не поддерживается. – Rakim

+0

@Rakim, у вас есть редактирование –

+0

Хотя я не совсем понимаю код, ваш пример дает возможное решение моей проблемы. Спасибо – Rakim

0
  1. декларировать и определить char * массив, выделить память.
  2. использование sprintf(). Проверьте справочную страницу here

Напишите код самостоятельно и сообщите нам о выходе.


EDIT:

вы всегда можете бросить адрес переменной int к char *, но быть очень осторожным при использовании char *.

int i = 10; 
char * p = NULL; 
p = (char *)&i; 

, если вы хотите, чтобы *pвести себя как целое число, не забудьте бросить p обратно int * перед использованием. В противном случае вы будете поражены.

+0

спасибо за ответ. Я использую pebble (smartwatch sdk), и функция не поддерживается. – Rakim

+0

@ Rakim как насчет редактирования? –

+0

Я не получаю никаких ошибок или ничего, но ничего не отображается в моем текстовом слове. Я уверен, что нет ничего плохого в остальной части кода, потому что передача в 'char * example =" 8 "' в качестве параметра функции отлично работает – Rakim

0

Проверьте код ниже:

int a = 1234; 
char *str = malloc(20); 
sprintf(str, "%d", a); 
printf("%s\n",str); 
+0

Я заявлял в вопросе, что хочу char *, а не char [], но спасибо за ответ – Rakim

+0

@Rakim Там вы идете !!! – Gopi

0

Ваша первая попытка будет работать - если вы собираетесь на char вместо char*.

int i = 8; 
char c = (char) (i + '0'); // c = "8" 

Метод технически не гарантирует работу - так как стандарт не будет считать, что вы используете ASCII, UNICODE или EBCDIC - но используя некоторую систему символов, кроме тех, три практически ничего не слышно, так ты в безопасности. Он также будет работать только для целых чисел в диапазоне [0-9].

0

Простой метод:

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

.... 
char buffer[32] = {'\0'}; 

int a = 23; 

itoa(a,buffer,10); // here 10 means decimal 
... 
0

пример вы даете в качестве рабочего, гольца * пример = "8" // Это должно быть символ * пример = '8'; Вы создаете указатель на символ, а не строку, массив символов.

Вам нужен массив символов, представляющий int as ascii? (Или юникода?)

char buffer[32] = {'\0'}; //or char *buffer = malloc(32 * sizeof(char)); 
int a = 10; 
itoa(a, buffer,10);//convert an integer that can be represented by up to 32 chars 

Имел вид (в течение 30 секунд) на галечном апи и нашел API-Sprintf версии, стоит посмотреть? int snprintf(char * str, size_t n, const * fmt, ...)

+0

при использовании * буфера в iota может потребоваться & buffer, попробуйте его – crypticfool

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