如何使用 C 将两个整数合并为一个字符串



我有两个整数,我想将它们合并成一个字符串 以下方式:例如,给定xx=555yy=3,我希望字符串为: "555-03"。在我的例子中,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;
        }

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-03n"
  return 0;
}

最新更新