为什么我的comportstr在此代码中被更改为垃圾值?我不明白我的char数组如何改变值,如果没有改变它。这两个印刷语句之间没有其他内容。
int main(int argc, char* argv[])
{
char comportstr[10];
sprintf(comportstr,"COM%d",COMPORT_NUM);
if(DEBUGGING) fprintf(stderr,"str is: %s\n", comportstr); //prints str is: COM3
sprintf(curtime , "%s" , currentDateTime());
if(DEBUGGING) fprintf(stderr,"str is: %s\n", comportstr); //prints str is: ;32
}
这是currentDateTime的作用。它根本不会修改comportstr。
// Gets current date/time, format is YYYY-MM-DD.HH;mm;ss
const std::string currentDateTime()
{
time_t now = time(0);
struct tm tstruct;
char buf[80];
tstruct = *localtime(&now);
// Visit http://www.cplusplus.com/reference/clibrary/ctime/strftime/
// for more information about date/time format
strftime(buf, sizeof(buf), "%Y-%m-%d.%H;%M;%S", &tstruct);
return buf;
}
答案 0 :(得分:1)
sprintf(curtime , "%s" , currentDateTime());
currentDateTime
函数返回std::string
,但%s
仅用于C风格的字符串。你想要currentDateTime().c_str()
。你的编译器应该给你一个警告。
答案 1 :(得分:1)
在currentDateTime()
函数中,您将返回std::string
,并传递给sprintf()
的vararg界面。这不起作用,因为您无法将标准布局类型传递给vararg接口。也就是说,对sprintf()
的第二次调用会导致未定义的行为。
您可以使用
来避免此问题sprintf(curtime , "%s" , currentDateTime().c_str());
......或者,实际上,
strcpy(curtime, currentDateTime().c_str());