如何解决带有制表符的strcat操作不起作用
| 我正在尝试使用以下代码将长度为numAttr
的整数数组attr
转换为字符串,但由制表符\'\\t\'
分隔。如果为attr[i] = 0
,则在attrStr
中仅添加一个制表符\'\\t\'
,以便该字段为空字符串。如果为attr[i] !=0
,我将整数转换为字符串,然后加至attrStr
。但是在执行strcat(attrStr,\"\\t\")
时,不会在字符串中添加制表符。我有什么特别想念的吗?我希望我以正确的方式使用strcat
操作。下面是代码:
char *attrStr = new char[len]; strcpy(attrStr,\"\");
char *buf = new char[buflen]; strcpy(buf,\"\");
int i = 0;
for (i=0; i<numAttr-1; i++) {
if (attr[i]!=0) {
itoa(attr[i],buf,10);
strcat(buf,\"\\t\");
strcat(attrStr,buf);
} else {
strcpy(buf,buf);
}
}
itoa(attr[i],10); strcat(attrStr,buf);
return attrStr;
解决方法
使用
std::stringstream
和std::string
。它们将使您的生活变得简单而轻松。
#include <sstream>
#include <string>
std::stringstream ss;
ss << attr[0];
for (i=1; i<numAttr; i++)
{
if ( attr[i] )
ss << \"\\t\" << attr[i];
else
ss << \"\\t\"; // If attr[i] = 0,add \'\\t\' to the string (as instructed)
}
std::string s = ss.str();
,正如其他人所说,请使用std :: strings。这样,格式化和内存泄漏会分开,您的代码看起来还可以。
但是,您怎么知道字符串中没有制表符呢?您如何检查?
并非所有的IO设备和GUI系统在输出中都支持选项卡,因此我将使用调试器查看char *缓冲区,以检查它们是否确实缺失。
,您的代码存在一些问题,但总的来说,您的代码确实可以执行预期的工作。将TAB字符以您希望添加的方式添加到字符串中。如果没有看到,则必须在错误的位置或以错误的方式查看。
是什么让您相信没有添加TAB字符?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。