我想将一些文本(char数组)插入另一个char数组中。我用过这个strcpy,但它有时显示(并不总是)奇怪的迹象,看看:
如何摆脱它们?
继承我的代码:
#include <string>
#include <string.h>
#include <time.h>
#include <stdio.h>
#include <iostream>
using namespace std;
const string currentDateTime() {
time_t now = time(0);
struct tm tstruct;
char buf[80];
tstruct = *localtime(&now);
strftime(buf, sizeof(buf), "%X", &tstruct);
return buf;
}
char *addLogin(char *login, char buf[])
{
string b(buf);
string l(login);
string time = currentDateTime();
string res = time;
res += l;
res += b;
return const_cast<char*>(res.c_str());
}
int main(int argc, char **argv)
{
char buf[1024];
strcpy(buf, " some text");
char *login = "Brian Brown";
char *temp = addLogin(login, buf);
strcpy(buf, temp);
printf("%s\n", buf);
return 0;
}
编辑:
const string currentDateTime() {
time_t now = time(0);
struct tm tstruct;
char buf[80];
tstruct = *localtime(&now);
strftime(buf, sizeof(buf), "%X", &tstruct);
string b(buf);
return b;
}
现在似乎运作良好
答案 0 :(得分:2)
从函数currentDateTime()
返回一个未定义行为的局部变量buf
。当您稍后追加字符串(以及此函数返回的字符串)时,这肯定会引发问题。
此外,该函数的签名为const string
,但您返回char*
。