【问题标题】:C language int num to char stringC语言int num转char字符串
【发布时间】:2016-01-26 09:02:39
【问题描述】:

我如何获得:

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

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

【问题讨论】:

  • "1023" 是一个五符号字符串。您只在堆栈上分配了四个。
  • 什么意思?您的代码不输出任何内容。
  • 是的,我在故障排除时意识到了这一点。我最终采用了另一种方法,但感谢您的帮助。
  • 如果您自己的解决方案解决了这个问题,您可以随意添加它作为答案(和even encouraged)。

标签: c string int type-conversion


【解决方案1】:

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

#include <stdio.h>

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

【讨论】:

  • 谢谢,我最终采用了不同的方法,但感谢您的帮助。我知道我很接近了.. rip
  • @Arch 当然没问题。如果有帮助,您应该接受答案。
【解决方案2】:
#include <stdio.h>

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

【讨论】:

  • 如果这个答案有用,请采纳这个答案
  • 您将 5 个字符的字符串存储在 4 个字符的数组中。
  • 但是,问题问为什么没有输出。问题中没有输出函数确实解释了...
  • @NisseEngström 运行它,这个程序在告诉任何东西后给出完美的输出......
【解决方案3】:

myString 的内存表示如下所示:

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

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

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

char myString[5];

【讨论】:

    【解决方案4】:

    来自 ISO C11 草案 n1570:

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

    也就是说,返回值

    sprintf(myString, "%d", 1023);
    

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

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

    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 :-)
    

    【讨论】:

      猜你喜欢
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 2016-08-13
      • 1970-01-01
      • 1970-01-01
      • 2021-04-16
      • 1970-01-01
      • 2015-03-11
      相关资源
      最近更新 更多