2014-11-21 99 views
1

我一直在尋找整個網絡,我找不到任何東西。我目前有一個整數(int),我需要將其轉換爲char*(NOT char[])。到目前爲止,我無法以任何方式工作。感謝如何將int轉換爲字符串(char *)C

編輯: 我試着做以下,沒有運氣

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

編輯2: 因爲我是新來的C I件事,我在這裏有過一些誤解。 我目前使用卵石SDK(智能手錶),我試圖從一個int轉換爲字符串,以在函數中傳遞它text_layer_set_text() 當我使用格式:char *example = "4"我的代碼很好。儘管無論我嘗試在層中傳遞我的整數的方式都不如預期的那樣,

+1

請問您可以發表一個示例(即使它錯了,您該如何做?)? – bitcell 2014-11-21 10:34:05

+0

請顯示您最後一次失敗的嘗試。 – dasblinkenlight 2014-11-21 10:35:54

+0

@Gopi'char * example'肯定不是一個字符串文字。 – unwind 2014-11-21 11:50:18

回答

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; 
} 

編輯

我現在用的是卵石(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

感謝您的回覆。我正在使用卵石(smartwatch sdk),並且不支持sprintf()函數。 – Rakim 2014-11-21 10:49:46

+0

@Rakim,你有一個編輯 – 2014-11-21 11:15:18

+0

雖然我沒有完全理解代碼,但你的例子給出了我的問題的一個可能的解決方案。謝謝 – Rakim 2014-11-21 11:19:58

0
  1. 聲明並定義一個char *數組,分配內存。使用sprintf()。檢查手冊頁here

自己編寫代碼並讓我們知道輸出。


編輯:

可以將int變量的地址總是轉換爲char *,但在使用char *非常小心。

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

,如果你想*p表現爲整數,不要忘記使用前投p回到int *。否則,你會驚訝。

+0

感謝您的回覆。我正在使用卵石(smartwatch sdk),並且不支持該功能。 – Rakim 2014-11-21 10:44:37

+0

@Rakim如何編輯? – 2014-11-21 10:52:21

+0

我沒有得到任何錯誤或任何東西,但沒有顯示在我的文本層。我確定其餘代碼沒有任何問題,因爲傳入'char * example =「8」'作爲函數的參數很有效 – Rakim 2014-11-21 10:58:25

0

檢查下面的代碼:

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

我在問題中說過比我想要一個char *而不是char [],但是謝謝你回覆 – Rakim 2014-11-21 10:45:49

+0

@Rakim你在那裏! – Gopi 2014-11-21 10:47:07

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」 // 這應該是char *例子= '8';你正在創建一個char指針,而不是一個字符串,一個字符數組。

你想要一個字符數組表示int ascii? (或Unicode?)

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 

曾在卵石API看看(30秒),並發現這些API的sprintf版本,值得一試? int snprintf(char * str, size_t n, const * fmt, ...)

+0

如果在iota中使用*緩衝區可能需要緩衝區,請嘗試 – crypticfool 2014-11-22 02:13:54