我正在编写一个程序,我在其中创建自己的字符串类。该程序应该指示用户编写一个句子,复制输入,然后显示它包含的字符数。
虽然它确实构建并编译(使用Visual Studio Express 2013),但它会复制用户被指示写下的句子,不显示字符数量,然后崩溃。
我猜测是如何动态分配内存或者如何在函数之间传递*字符和_String。但是有些如何解决这个问题或者改进我的代码会有所帮助。
标题:String.h
class String
{
private:
char *characters[50]; // 50 is just a placeholder to get it to work
int size;
public:
// Constructors and Destructors
String();
String(char*);
~String();
// Other functions
void stringAssign(char*);
void printString(char*);
int stringSize(char*) const;
};
实施:String.ccp
#include "String.h"
#include <iostream>
#include <cstring>
String::String()
{
size = 0;
* characters = 0;
}
String::String(char* _String)
{
size = stringSize(*characters + 1);
_String = new char[size];
}
String::~String()
{
delete [] *characters;
}
void String::stringAssign(char* _String)
{
_String = characters[size];
}
void String::printString(char* _String)
{
for (int i = 0; _String[i] != '\0'; i++)
std::cout << _String[i];
}
int String::stringSize(char* _String) const
{
int size;
size = strlen(*characters);
return size;
}
测试:Main.ccp
#include "String.h"
#include <iostream>
int main()
{
char string[50];
String s;
std::cout << "Enter a sentence that is less than 50 characters\n\n";
std::cin.getline(string, 50);
s.printString(string);
std::cout << s.stringSize(string);
return 0;
}
解决:
我让程序正常运行。我实际上只是在实现中用*character
替换了两个_String
参数。我知道它与函数传递有关,我确实得到了一些帮助。但是有一个人没有提供任何有用的意见(并且实际上侮辱了我),并且两人都说有太多东西需要修理&#34;。关于&#34;这么多事情的一些阐述&#34;我不得不修理会很好。
答案 0 :(得分:2)
在几乎所有函数中,你使用函数的{em>参数,_String
执行某些操作,而不是使用应该在内部保存字符串的成员字段characters
。 。所以你的函数根本不会更改字符串,而是试图弄乱你传递它们的东西。
一个例子
struct Foo {
char internal[42];
void bar(char *external) { external[0] = 'X'; }
void qux(char *external) { internal[0] = 'Z'; }
};
int main() {
Foo foo;
char something[6] = "Hello";
foo.qux(something); // Did something to the member variable foo.internal; variable something is unchanged.
foo.bar(something); // Now something reads "Xello", foo.internal was not changed.
}
您的代码几乎与bar
函数一样,而它应该像qux
一样工作。
在此代码中确实有太多问题需要解决。
万一你错了......不像其他语言,比如Python或Smalltalk,C ++通过this
传递一个指向当前对象的指针 。