【问题标题】:Strcat not appending a characterStrcat不附加字符
【发布时间】:2022-11-12 02:14:41
【问题描述】:
char* oledScreen::getCurrentTime(){
   char* hour = malloc(16);
   snprintf(hour, 16, "%d", getHour());

   char* minute = malloc(16);
   snprintf(minute, 16, "%d", getMinute());

   char* firstPart = strcat(getHour() < 10 ? strcat("0",hour) : hour, ":");
   const char* secondPart = getMinute() < 10 ? strcat("0",minute) : minute;

   return strcat(firstPart, secondPart);
};

我正在尝试附加两个整数,可以使用getHour()getMinute() 获得。但是,我需要检查这两个中的一个是否小于 10:如果是,我需要附加一个 0,以便输出为:0X,其中XgetHour()getMinute()

我的问题是它没有附加 : 字符。例如,如果 getHour() = 9getMinute() = 15getCurrentTime() 的输出是 0915 而不是 09:15。你知道为什么会这样吗?

【问题讨论】:

  • 你也有内存泄漏,谁来free分配给hourminute的内存?
  • snprintf(buffer, buffer_size, "%02d:%02d", getHour(), getMinute())
  • 顺便说一句,您的代码不是 C,而是 C++。所以你不应该一开始就使用char 数组或snprintf
  • @Someprogrammerdude 或 malloc...
  • strcat("0",hour)hour 中的任何内容添加到字符串文字 "0"。您不能向字符串文字添加内容。应该给你一个警告:godbolt.org/z/a48x3bnYo

标签: c char strcat


【解决方案1】:

首先,strcat("0",hour) 将导致未定义的行为当您尝试修改不允许的文字字符串 "0" 时。

与其使用多个strcat 调用,不如简单地创建一个足够大的字符串以适应结果,然后使用snprintf 将内容放入字符串中?

使用snprintf 还可以更轻松地选择性地为小时值添加零前缀。

也许是这样的:

int size_needed = snprintf(NULL, 0, "%02d:%02d", getHour(), getMinute());
if (size_needed <= 0)
{
    return NULL;
}

// Allocate memory, and actually create the string
char *result = malloc(size_needed + 1);
snprintf(NULL, 0, "%02d:%02d", getHour(), getMinute());

return result;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-30
    • 1970-01-01
    • 1970-01-01
    • 2011-08-22
    • 1970-01-01
    • 2018-12-18
    • 2020-04-19
    相关资源
    最近更新 更多