#include<iostream>
using namespace std;
#include<cstring>
struct stringy
{
char * str;
int ct;
};
void set(stringy & stringa, char ar[]);
void show(stringy & stringa);
int main()
{
stringy beany;
char testing[] = "Reality isn't what is used to be.";
set(beany, testing);
show(beany);
return 0;
}
void set(stringy & stringa, char * ar)
{
char * ps = new char[strlen(ar) + 1];
stringa.str = ps;
strcpy(ar,ps);
cout << strlen(stringa.str);
stringa.ct++;
delete [] ps;
}
void show(stringy & stringa)
{
for(int i = 0; stringa.str[i] != '\0'; i++)
{
cout << stringa.str[i];
}
}
这是我的代码。这是练习的一部分。当被要求编写执行所请求任务的函数时,我被赋予了main函数的主体。
找到空间来保存测试副本, 设置beany的str成员指向 新块,将测试复制到新块, 并设置bet的ct成员
我的问题在于设置功能。我觉得好像我满足了标准,strlen就在那里,因为我想弄清楚发生了什么......它返回0.然后程序退出。
答案 0 :(得分:0)
此代码存在很多问题,其中包括:
strcpy(ar, ps);
这会将ps
复制到ar
,而不是相反。你想要:
strcpy(ps, ar);
如果使用const
限定符,编译器会检测到此错误。
此外,delete[] ps
末尾的set()
不应该在那里。
最后,我不确定ct
字段的用途是什么,所以我不能告诉你应该是什么,但增加一个未初始化的字段肯定是错误的。