带有制表符的strcat操作不起作用
strcat operation with tabs character not working
我正在使用以下代码将长度为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::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::string。除了格式化和内存泄漏之外,您的代码看起来还可以。
但是,你怎么知道字符串中没有制表符呢?你是怎么检查的?
并不是所有的IO设备和GUI系统都支持输出中的选项卡,所以我会用调试器查看char*缓冲区,以检查它们是否真的丢失了。
您的代码有一些问题,但通常情况下,您的代码会完全按照它应该做的去做。TAB字符会按照您希望添加的方式添加到字符串中。如果你没有看到它,你一定是看错了地方或方向。
究竟是什么让您相信没有添加TAB字符?
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- C++为什么尽管我调用了void函数,它却不起作用
- 为什么在保护模式下继承升级不起作用
- 循环在计数器中不起作用
- 在其他文件中创建类时在 c++ 项目中不起作用
- "+=" 操作在类型之间不起作用 std::复杂<double>和__complex__双精度
- 为什么当我对数组使用增量操作时,do for 循环不起作用
- OpenCV像素操作有时不起作用
- 操作溢出不起作用C
- 由于某种原因,使用 OR 运算符执行操作不起作用
- Boost.Spirit解析字符串的语义操作不起作用
- GDB 跟踪点的操作不起作用
- 当 std::fprintf(stderr,..) 失败时,操作是否不起作用,或者可以在失败之前写入一点
- 提升异步操作不起作用(对我来说)
- 矢量上的擦除操作不起作用
- 迭代器操作不起作用
- 带有制表符的strcat操作不起作用
- 标准函数和操作在类构造函数中不起作用