如何使用C将两个整数组合成一个字符串?

时间:2017-06-12 21:43:02

标签: c string int printf

  

我有两个整数,我想将它们组合成一个字符串   以下方式:例如,给定xx=555yy=3,我希望字符串为:   " 555-03&#34 ;.在我的情况下,yy中的值类似于小时,因此它必须包含   两位数,但几天并不重要,并且存在差异   介于" 555-03"和" 555-3"。任何想法我怎么能做的事情   此?

这基本上我得到以下错误:函数返回局部变量的地址[-Wreturn-local-addr] 我的尝试:

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

static char* intToTimeDate(int day,int hour);
int main()
{
    int hour=5555;
    int curr_day=7;

    char* curr_time=intToTimeDate(curr_day,hour);
    printf("dd=%s",curr_time);
    return 0;
}


static char* intToTimeDate(int day,int hour){
          char str[16];
           snprintf ( str, sizeof ( str) - 1, "%d-%02d", day,hour);
           printf("str=%s",str);
           return str;
        }

1 个答案:

答案 0 :(得分:0)

OP的代码工作,除了它返回一个指向局部变量的指针,一旦函数结束,它就是UB。而是将指针传递给有效内存以存储结果。

static char* intToTimeDate(char *str, int day,int hour){
   sprintf(str, "%d-%02d", day, hour);
   printf("str=%s",str);
   return str;
}

目标字符串应足够宽,以容纳任何int值。

返回指向字符串的指针的解决方案涉及分配字符串。在C99之后,代码可以使用复合文字作为临时空间。从intToTimeDate()返回的指针有效,直到块结束 - 复合文字的生命周期

#include <limits.h>
#include <stdio.h>

static char* intToTimeDate(char *str, int day, int hour) {
  sprintf(str, "%d-%02d", day, hour);
  return str;
}

// Size needed to store a decimal string verison of `int`
#define INT_DEC_SIZE (sizeof(int)*CHAR_BIT/3 + 3)
//                         v--- compound literal ----------------------v
#define INTTOTIMEDATE(d,y) (intToTimeDate((char [INT_DEC_SIZE*2 + 2]){0}, (d), (y)))

int main(void) {
  puts(INTTOTIMEDATE(555, 3));  // Output "555-03\n"
  return 0;
}