C语言将num转换为字符串



如何从:

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";吗?

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

您需要为myString('1','0','2','3','')分配5个元素

#include <stdio.h>
int main(void){
  int avg_adc = 1023;
  char myString[5];
  sprintf(myString, "%d", avg_adc);
  printf("%sn", myString);
  return 0;
}

来自ISO C11草案n1570:

sprintf函数返回写入数组的字符数,不计算结束的空字符,如果是,则为负值编码错误。

也就是说,

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

确实是4,但它实际上将5个字符写入myStringsnprintf显示了更多信息,它限制了写入指定值的字符数量,并且这个数字应该考虑到终止的空字符:

因此,当且仅当,以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: %dn", charsWritten);
    printf("myString=%s, expected %dn", myString, avg_adc);
}

系统输出:

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

也就是说,需要检查snprintf的返回值。如果测试失败,那么您的结果字符串被截断,并且它需要比返回值大一个字符,以容纳您希望它存储的所有字符,假设不返回负值。声明char myString[5];会得到以下输出:

OK :-)

myString的内存表示如下:

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

char数组以空字符''结束,您忘记为其分配内存。

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

char myString[5];
#include <stdio.h>
main()
{
        int avg_adc = 1023;
        char myString[4];
        sprintf(myString, "%d", avg_adc);
        printf("%s",myString); //you forgot this..
}

最新更新