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

标签 c++

我正在尝试使用以下代码将长度为 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();

关于c++ - 带有制表符的 strcat 操作不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6131097/

相关文章:

c++ - 一个数据包读取器Qt/C++ API设计

c++ - 简单 C++ 组合与继承示例的请求

c++ - CMake 找不到 boost 库(CGAL、Windows)

c++ - const string 类成员的初始化列表

c++ - 改进 CUDA 中的异步执行

c++ - 字符串 "Hello\0"是否等于 {'H' ,'e' ,'l' ,'l' ,'o' ,'\0' } 或 {'H' ,'e' 0x104 567910 ,'l' ,'l' ,'o'}?

c++ - 在 macOS Catalina 上从源代码编译 LLVM(How to solve "stdio.h"not found)

c++ - 倒置计数带来麻烦(修改归并排序的实现)

c++ - 尝试销毁 sf::Font 时出现段错误

c++/g++ 比较 WORD 和 CHAR 的魔数(Magic Number)