我在C ++中有以下类型的源代码。现在我想用C语言创建这个程序(使用C ++编译器),但我对分配感到困惑。
我目前的功能代码
shred
我尝试使用此char* product(char* a, unsigned short b, unsigned short zeroes)
{
char* finish = new char[strlen(a) + 2 + zeroes]();
short carry = 0;
unsigned short c;
unsigned short s;
for (short i = strlen(a) - 1; i >= 0; i--) {
c = char2int(a[i]);
s = (b*c + carry);
carry = s / 10;
finish[strlen(finish)] = int2char(s % 10);
}
printf("%s", finish); // dump! Looking what is inside
if (carry > 0) {
finish[strlen(finish)] = int2char(carry);
}
reverseChar(finish);
for (short i = 0; i < zeroes; i++) {
finish[strlen(finish)] = '0';
}
return ltrim(finish,'0'); // trim
}
通过malloc.h
分配,但它给了我随机字符(在转储部分)。有人可以说我刚刚发生了什么吗?
答案 0 :(得分:3)
operator new
分配内存,但也调用要创建的对象的构造函数。
在这种情况下char()
将它们初始化为零。
要获得等价代码,您可以使用memset
。
请注意,如果您的类型不是第一个(如char),则还必须将您给malloc的数量乘以类型的大小。 new
会自动执行此操作。
当内存中有垃圾时,如果你调用strlen(finish)
,代码会遇到实际问题。