带有制表符的strcat操作不起作用

strcat operation with tabs character not working

本文关键字:操作 不起作用 strcat 制表符      更新时间:2023-10-16

我正在使用以下代码将长度为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,"t"); 
        strcat(attrStr, buf);
    }
}
itoa(attr[i],buf,10); strcat(attrStr, buf);
return attrStr;

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

正如其他人所说,使用std::string。除了格式化和内存泄漏之外,您的代码看起来还可以。

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

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

您的代码有一些问题,但通常情况下,您的代码会完全按照它应该做的去做。TAB字符会按照您希望添加的方式添加到字符串中。如果你没有看到它,你一定是看错了地方或方向。

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