在指针字符c ++中分配字符数组的值

时间:2016-06-06 17:29:52

标签: c++ pointers

我正在为我的学校项目创建一个时间类(字符串基础)!我得到了一个指针字符!如果它很奇怪,我有一个函数来规范化时间 在normalize函数中我有一个字符数组来存储正确的时间但是当我想将字符数组分配给指针字符时它会变为false!

char st[10] = "", sh[3] = "", sm[3] = "", ss[3] = "";
itoa(hour, sh, 10);
itoa(minute, sm, 10);
itoa(second, ss, 10);

if(hour<10){strcat(st, "0");}
strcat(st, sh);strcat(st, ":");
if(minute<10){strcat(st, "0");}
strcat(st, sm);strcat(st, ":");
if(second<10){strcat(st, "0");}
strcat(st, ss);strcat(st, "");

stime = st;

stime是指针字符,可以节省课堂上的时间 当我想使用stime的值时,我得到了非常奇怪的结果。 stime获取最后一个类stime的值。例如,我有这个代码:

time a("1:50:0"), b("4:5:10");
a.print();
b.print();

但我得到04:05:10两个课程,我不知道为什么! 如果您需要剩下的代码,我可以在此处上传:Google Drive link to file

2 个答案:

答案 0 :(得分:1)

您可以尝试将其作为C ++解决方案:

#include <sstream>
#include <iomanip>
#include <iostream>

using namespace std;

string GetComponent(int value)
{
    ostringstream oss;
    oss << setfill('0') << setw(2) << value;
    return oss.str();
}

void PrintTime(int hh,int mm,int ss)
{
    cout << GetComponent(hh) << ':' << GetComponent(mm) << ':' << GetComponent(ss) << endl;
}

用法示例:

PrintTime(1,2,3);
PrintTime(1,2,33);
PrintTime(1,22,33);
PrintTime(11,22,33);

答案 1 :(得分:1)

编译代码时,我收到以下警告:

warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
   time(char *t = "0:0:0"):stime(t){normalize(-1, -1, -1);}

这就是造成问题的原因。

C ++中的{p> "0:0:0"const char[5],可以隐式转换为const char *,但不能转换为简单的char *,这是您为{选择的存储类型{1}}。

正如其他人所提到的,在C ++中你应该使用time而不是std::string

作为一般规则,除非您确定知道它们出现的原因,否则不应忽略警告。通常情况下,正如在这种情况下,他们告诉您,您的代码不会按照您期望的方式运行。