【发布时间】:2023-03-26 09:14:01
【问题描述】:
我试图在 C++11 中连接两个字符串,但我经常遇到意外的行为。
首先,我有一个函数可以将任何类型转换为字符串:
template <class T>
static inline const char * toStr(T arg) {
stringstream ss;
ss << arg;
return (ss.str()).c_str();
}
然后,我这样使用这个函数:
string measure_name;
for (unsigned long j = 0; j < 1280; j++) {
measure_name = string("ADC_") + toStr(j);
cout << measure_name << endl;
}
一切顺利,直到我达到 4 位数字 (> 999) :
我的变量measure_name 通常等于“ADC_ADC_”......它是随机发生的。我做了一些研究,并没有发现这种奇怪的行为。
请注意,如果 toStr 返回 string 而不是 const char *,则此问题已得到解决。
另外,如果我尝试打印返回值,我从来没有看到它等于“ADC_ADC_”,所以我相信真正的问题来自连接指令:
string measure_name;
for (unsigned long j = 0; j < 1280; j++) {
const char* tmp = toStr(j);
if (!strcmp(toStr(j), "ADC_ADC_"))
cout << "bug" << endl; //never happens
measure_name = string("ADC_") + tmp; //problem comes from here
cout << measure_name << endl;
}
我只是想了解我在那里做错了什么......我知道我使用的是非常旧的 C++,但无论如何它应该可以工作。
感谢您的帮助。
【问题讨论】:
标签: c++ string c++11 concatenation