【问题标题】:How to get an integer as a string [duplicate]如何将整数作为字符串[重复]
【发布时间】:2015-07-18 00:37:55
【问题描述】:

我正在尝试返回一个字符串,即年份。

此代码不在我的 GUI 层附近,因此我正在尝试以下操作

#define COMPANY_COPYRIGHT            "Copyright © " + getYear() + "; 

当它被调用时,我有

void getCopyRight(BSTR* copyRight) 
{
    CString CopyRightStr    =   (CString)COMPANY_COPYRIGHT;
}

我正在为我的 getYear() 函数苦苦挣扎

#include <time.h>

const char getYear()
{
    time_t rawtime;
    struct tm * timeinfo;

    time (&rawtime);
    timeinfo = localtime (&rawtime);

    int year = timeinfo->tm_year + 1900;

    char buf[8];               //I think 8 as I expect only 4 characters, each is 2 bit

    sprintf(buf,"%d", year);   //I can see year shows 2015. But not sure why it's %d because this should be the output format, surely it should be %s but this errors

    return buf;                //I can see buf shows 2015
}

上述错误与

'return' : cannot convert from 'char[4] to 'const char'

我了解错误消息,但不知道该怎么做。如果我添加演员表,例如

    return (const char)buf;                //I can see buf shows 2015

然后它似乎返回一个 ASCII 字符,这不是我想要的。

我想要的是,不是将 2015 作为 int 返回,而是仅将值“2015”作为“字符串”返回...

【问题讨论】:

  • 如果这是 C,你的代码就毫无意义。你确定这不是 C++ 吗?考虑将该宏设为局部变量,或者如果不可能,至少将其设为适当的宏:#define COMPANY_COPYRIGHT ( CString("Copyright © ") + getYear() )。 (假设C++,否则宏是废话)
  • 重复引用的是我正在做的事情!
  • 存在多个问题:char 类型为单个字符,返回指向局部变量的指针无效,4 不足以存储 4 个字符的字符串。我建议你读一本好的 C 书。
  • strptime, snprintf 可能是有用的函数,一旦您纠正了未定义的行为问题。
  • 您添加了一条评论我认为是 8,因为我预计只有 4 个字符,每个是 2 位。不,那不是真的,您至少需要buf[5],因为C 字符串是空终止的。正如我所说,去读一本好的 C 书,值得花时间。

标签: c string int


【解决方案1】:

抛开任何其他问题,您的代码至少会产生undefined behaviour

在您的getYear() 函数中,您尝试返回局部变量buf 的地址。这是不可能的。

相反,你可以

  • buf定义为char指针。
  • 使用malloc()/calloc()动态分配内存
  • 使用并从getYear()返回buf
  • 在调用者中使用返回的指针。

也就是说,如果我正确理解了您的问题,您可以使用strtol()字符串 转换为int。您还需要更改函数签名。


编辑:

好的,关于转换部分我弄错了,您想要将int 转换为字符串。你最好的选择是sprintf()

【讨论】:

  • 是的,我正在这样做,但是,答案是指针位。我认为指向 char 的指针将是指向该单个字符的指针:( ...无论如何,谢谢
猜你喜欢
  • 1970-01-01
  • 2012-06-28
  • 1970-01-01
  • 2021-03-05
  • 2010-11-21
  • 2013-10-06
  • 2015-03-29
相关资源
最近更新 更多