首先我想说我是新手C++
,这是一个家庭作业。另外,我不确定我在标题中使用了正确的定义,如果我错了,请纠正我。
我必须创建一个字符串类来存储以空字符结尾的字符数组的内容。如果输入的长度大于 32,则将其存储在堆中,否则将其存储在堆栈中。
现在我正忙于构造函数:
#include "SString.h"
#include <iostream>
using namespace std;
SString::SString(const char* input)
{
// Determine length of input
int length = 0;
while (input[length] != '\0')
{
length++;
}
// Check for zero length
if (length == 0)
{
st_string[1] = ' ';
}
// Based on length, make heap string or use stack string
if(length > 32)
{
int i = 0;
p_string = new char[length];
while (i != length) //write string with input
{
p_string[i] = input[i];
i++;
}
}
else
{
int i = 0;
while(i != length) //write string with input
{
st_string[i] = input[i];
i++;
}
}
cout << "saved string:" << endl;
cout << p_string << endl;
}
现在我通过在 main 中使用这样的字符串调用 SimpleString 来测试它:
SString("test"); // or something
它可以工作,将字符串放在st_string
或p_string
但在这两种情况下,存储的字符串在末尾都有更多(奇怪的未定义)字符。所以在“测试”的情况下,我得到 test#54 或其他东西。
我猜它使保存的 char 数组大于输入的 char 数组,但我不明白为什么。