C ++连接三个char数组

时间:2015-08-23 17:41:38

标签: c++ arrays char

我有三个char数组。 它们中的每一个都代表了我希望最终拥有的大文件名的一部分。

就此而言,我想将这些char数组连接成一个大数组,并将其作为文件名传递给cImage.Save

以下是我建立字符串的内容:

// Time
time_t rawtime = time(NULL);
struct tm timeInfo;

// Strings
char path[sizeof("G:\\screenify_images\\")] = { "G:\\screenify_images\\" };
char fileName[128] = { 0 };
char fileExtension[16] = { ".jpeg" };

// Get current time and save it as string
localtime_s(&timeInfo, &rawtime);
strftime(fileName, 128, "%X", &timeInfo);

cout << "Path:" << path << endl << "FileName:" << fileName << endl << "Extension:" << fileExtension << endl;

// Memory for our new, final string
char *fullPath = new char[strlen(path) + strlen(fileName) + strlen(fileExtension) + 1];
strcat_s(fullPath, 128, path);
strcat_s(fullPath, 128, fileName);
strcat_s(fullPath, 16, fileExtension);

不幸的是,它要么根本不工作(甚至不是抛出错误,只是挂断),要么全名在开头就有一些奇怪的字符。 我担心这与我没有正确分配内存或其他错误有关。

欢迎任何帮助!

2 个答案:

答案 0 :(得分:3)

由于这个问题被标记为C ++,连接这些“char数组”的正确方法是不将它们作为char数组:

// Strings, for real
std::string path = "G:\\screenify_images\\";
std::string fileExtension = ".jpeg";

std::string fileName(128, 'x');
fileName.resize(strftime(fileName.data(), fileName.size(), "%X", &timeInfo));

// either
std::string fullPath = path + fileName + fileExtension;

// or
std::ostringstream oss;
oss << path << fileName << fileExtension;
// use oss.str()

请注意,如果您不想,则甚至不需要保存其他片段:

oss << "G:\\screenify_images\\"
    << fileName
    << ".jpeg";

答案 1 :(得分:1)

使用std :: string,您可以使用+ =或.append()自由地附加char *字符串和std :: string字符串。

如,

string path;
// path starts out empty, appending is the same as 
//  if definition of path had been "string path("/tmp/");
path.append("/tmp/");
string filename("afilename");
path.append(filename);
path += ".foo";