带有制表符的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字符?