如何实现此静态数组初始化的动态等价物:
char c[2] = {}; // Sets all members to '\0';
Run Code Online (Sandbox Code Playgroud)
换句话说,创建一个动态数组,其中所有值都初始化为终止字符:
char* c = new char[length]; // how do i amend this?
Run Code Online (Sandbox Code Playgroud) 我传递一个空的char数组,我需要递归填充使用strcat().但是,在VS调试器中,数组不是空的,它充满了一些我不认识的奇怪的垃圾字符.然后strcat()追加到这些垃圾字符的末尾而不是数组的前面.
我也试过了 encoded[0] = '\0'在传递数组之前清除垃圾,但是strcat()不会在递归调用上附加任何内容.
这是提供数组并调用递归函数的代码:
char encoded[512];
text_to_binary("Some text", encoded);
Run Code Online (Sandbox Code Playgroud)
这是递归函数:
void text_to_binary(const char* str, char* encoded)
{
char bintemp[9];
bintemp[0] = '\0';
while(*str != '\0')
{
ascii_to_binary(*str, bintemp);
strcat(encoded, bintemp);
str++;
text_to_binary(str, encoded);
}
}
Run Code Online (Sandbox Code Playgroud)
到底是怎么回事?
PS.我不能用std::string- 我坚持了char*.
编辑:这是阵列中的垃圾字符:ÌÌ""......
好吧,我真的对VS2008中的这种行为感到困惑.
这段代码..
char data[512] = "";
char c[1] = "";
c[0] = '1';
strcat(data, c);
Run Code Online (Sandbox Code Playgroud)
..导致data被设置为此字符串值:1ÌÌÌÌhÿ
当然应该只是1?
我怎样才能确保data只包含我复制到其中的单个char [](即1)?
为什么要strcat()复制所有垃圾?为什么c甚至包含那些垃圾?
谢谢你的帮助
编辑:谢谢大家.
所以我有一个创建动态数组的函数,然后在我离开函数之前删除数组(正如我想的那样),但是我在VS2008中收到了"Heap Corruption Detected"警告.如果我删除释放内存的行一切正常:
void myFunc()
{
char* c = new char[length];
memset(c, 0, length);
//.. do somsething with array
delete[] c; //this line throws an error??
}
Run Code Online (Sandbox Code Playgroud)
谢谢你的建议