使用制表符字符无效的strcat操作

时间:2011-05-25 21:21:24

标签: c++

我想将长度为attr的整数数组numAttr转换为字符串,但使用下面的代码用标签'\t'分隔。如果attr[i] = 0,我只会向'\t'添加一个标签attrStr,以便该字段为空字符串。如果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,"\t"); 
        strcat(attrStr, buf);
    }
}
itoa(attr[i],buf,10); strcat(attrStr, buf);
return attrStr;

3 个答案:

答案 0 :(得分:2)

使用std::stringstreamstd::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();

答案 1 :(得分:0)

正如其他人所说,使用std :: strings。那,格式化和内存泄漏,你的代码看起来很好。

但是,您怎么知道字符串中没有制表符?你是怎么检查它的?

并非所有IO设备和GUI系统都支持输出中的选项卡,因此我将使用调试器查看char *缓冲区,以检查它们是否真的丢失。

答案 2 :(得分:0)

您的代码存在一些问题,但通常您的代码完全按照预期执行。 TAB字符以您希望的方式添加到字符串中。如果你没有看到它,你必须在错误的地方或以错误的方式看。

究竟是什么让你相信没有添加TAB字符?