xcode 从源代码中删除奇怪的控制字符
xcode REMOVES weird control character FROM source
>**更新
我试图理解 XCode 如何/为什么似乎在我的C++源中添加了一个奇怪的字符,而实际上它正在删除它。我正在创建一个简单的类,并在完成C++课程时使用 CATCH2 测试框架。我有一个将数字转换为单词的 numwords 类。
using namespace std;
//int main( int argc, char ** argv )
TEST_CASE("Numwords example", "[numwords]")
{
bw::numword nw;
uint64_t n;
n = 3; REQUIRE( string(nw.words(n)) == "three");
n = 47; REQUIRE( string(nw.words(n)) == "forty-seven");
SUCCEED();
}
它失败了:
/Users/c.craig/Training/CPP/Working/Working/numword-test.cpp:21: FAILED:
REQUIRE( string(nw.words(n)) == "forty-seven" )
with expansion:
"forty-seven" == "forty-seven"
然后,通过仔细复制/粘贴期望值,我发现确实存在一些看不见的差异。就在这时,它神奇地开始过去了。我查看了我的 git diff 并看到了这个:
diff --git a/Working/numword-test.cpp b/Working/numword-test.cpp
index c8f58db..3643c03 100755
--- a/Working/numword-test.cpp
+++ b/Working/numword-test.cpp
@@ -18,5 +18,5 @@ TEST_CASE("Numwords example", "[numwords]")
uint64_t n;
n = 3; REQUIRE( string(nw.words(n)) == "three");
- n = 47; REQUIRE( string(nw.words(n)) == "forty-seven^P");
+ n = 47; REQUIRE( string(nw.words(n)) == "forty-seven");
}
这个奇怪的控制字符仅在差异中显示,并且仅在失败后我尝试从差异或控制台复制/粘贴文本之后。添加特殊字符会导致测试通过。如果我在键盘上手动键入值"四十七",则特殊字符将消失并失败。到底发生了什么?这个^P隐藏字符是什么?
numword.cpp的来源如下:
#include "numword.hpp"
using namespace bw;
using namespace std;
numword::numword(uint64_t num) : number(num) {
}
static const char * unk = "?";
static const char * ones[] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"};
static const char * tens[] = {"twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"};
const char * numword::words(uint64_t num) const {
std::string asString;
if(num < 20)
asString = string(ones[num]);
else if(num < 100){
int index = ((int)num/10)-2;
int x = ((int)num%10);
asString += string(tens[index]) + "-" + string(ones[x]);
} else
asString = unk;
char *result = (char*)malloc(asString.length());
memcpy(result, asString.c_str(), asString.length());
return result;
}
我刚刚做了一些研究,发现^P是一个数据链路转义代码(DLE(。我仍然不确定如何键入它。我的数字词.cpp逻辑是如何添加它的?我哪里出错了?
我想出了我的困境!控制字符是一个工件,因为我没有从单词方法终止我的字符串。从那以后,我添加了一个 nul 终止符,问题就消失了。(请不要在这里提及我明显的记忆泄漏,我正在重新学习!
更新后的单词方法:
const char * numword::words(uint64_t num) const {
std::string asString;
if(num < 20)
asString = string(ones[num]);
else if(num < 100){
int index = ((int)num/10)-2;
int x = ((int)num%10);
asString += string(tens[index]) + "-" + string(ones[x]);
} else
asString = unk;
char *result = (char*)malloc(asString.length());
memcpy(result, asString.c_str(), asString.length());
result[asString.length()] = ' ';
return result;
}
相关文章:
- 从控制台中删除最后打印的元素
- C++ 如何从控制台中删除一行?
- xcode 从源代码中删除奇怪的控制字符
- QTEXTEDIT更改控制字符
- 在Linux上使用libserial将ASCII控制字符发送到串行设备
- 如何以可读格式打印控制字符
- C 逃脱控制字符
- 使用退格控制字符擦除
- 在发送数据之前压缩数据 - 控制字符
- 如何通过C++代码在MySQL数据库中存储控制字符
- 将文件从客户端传输到服务器时缺少字节,字节值也表示一些控制字符
- 由于隐藏/控制字符,在C++中读取文本文件的行失败
- 从控制台中删除单个字符
- 如何在c++中打印/cout不可打印/控制字符
- 如何将十六进制值转换为ASCII控制字符的首字母缩略词
- Qt, c++ -从文件中读取控制字符
- getline和控制字符
- 回文查找器:非字母数字字符删除问题
- string控制字符:将十六进制数字赋给字符串
- 将控制字符传递给字符数组