C语言int num为char字符串

时间:2015-10-27 03:56:17

标签: c string int type-conversion

我如何获得:

int i = 1023  

到:

char string[4] = "1023"

这是我尝试过的代码:

尝试1

#include <stdio.h>

main(){

    int avg_adc = 1023;
    char myString[4];
    sprintf(myString, "%d", avg_adc); 
}  
//Output returned 4

尝试2

main(){

    int avg_adc = 1023;
    char myString[4];
    snprintf(myString, 4, "%d", avg_adc); 
}  
//Output returned 4

这些输出不是myString == char myString[4] = "1023";吗?

我真的很困惑如何获得我需要的输出。

4 个答案:

答案 0 :(得分:9)

你需要为myString分配5个元素(&#39; 1&#39;,&#39; 0&#39;,&#39; 2&#39;,&#39; 3&#39;,&# 39; \ 0&#39)

#include <stdio.h>

int main(void){
  int avg_adc = 1023;
  char myString[5];
  sprintf(myString, "%d", avg_adc);
  printf("%s\n", myString);
  return 0;
}

答案 1 :(得分:1)

从ISO C11草案n1570:

  

sprintf函数返回数组中写入的字符数,   不计算终止空字符,如果是,则计算负值   编码错误发生。

换句话说,

的返回值
sprintf(myString, "%d", 1023);

确实是4,但它实际上将 5 字符写入myString。使用snprintf显示更多内容,这会限制写入指定值的字符数,此数字应考虑终止空字符:

  

因此,当且仅有完全写入以null结尾的输出   如果返回的值是非负且小于[指定的限制]。

int avg_adc = 1023;
char myString[4];
int charsWritten;

charsWritten = snprintf(myString, sizeof(myString), "%d", avg_adc);
if (charsWritten >= 0 && charsWritten < sizeof(myString)) {
    printf("OK :-)\n");
} else {
    printf("TROUBLE :-(\n");
    printf("Returned: %d\n", charsWritten);
    printf("myString=%s, expected %d\n", myString, avg_adc);
}

我的系统输出:

TROUBLE :-(
Returned: 4
myString=102, expected 1023

换句话说,您需要检查snprintf的返回值。如果测试失败,则结果字符串被截断,并且它必须是一个大于返回值的字符,以适合您希望它存储的所有字符,假设不返回负值。声明char myString[5];会产生以下输出:

OK :-)

答案 2 :(得分:0)

myString的内存中表示如下所示:

            --- --- --- --- ---
myString:  | 1 | 0 | 2 | 3 |\0 |
            --- --- --- --- ---

即。 char数组以空字符'\0'终止,您忘记为其分配内存。

在您的代码中,如果您要存储int avg_adc = 1023;,则应考虑额外的char,并将数组定义为:

char myString[5];

答案 3 :(得分:-2)

#include <stdio.h>

main()
{
        int avg_adc = 1023;
        char myString[4];
        sprintf(myString, "%d", avg_adc);
        printf("%s",myString); //you forgot this..
}