#1
by ピクルス » 3年前
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstring>
#include<cstdlib>
using namespace std;
class samp {
char *s;
public:
samp() { cout << "a"; s = '\0'; }
~samp() { if (s) free(s); cout << "sを開放する\n"; }
void show() { cout << s << "\n"; }
void set(char* str);
};
void samp::set(char* str) {
s = (char*)malloc(strlen(str) + 1);
if (!s) {
cout << "メモリ割り当てエラー\n";
exit(1);
}
strcpy(s, str);
}
samp input() {
char s[80];
samp str;
cout << "文字列の入力: ";
cin >> *s;
str.set(s);
return str;
}
int main()
{
samp ob;
ob = input();
ob.show();
return 0;
}
というプログラムを書いたところ、 a のみしか表示されません。
参照の&だけ使えば解決できるらしいのですが、この場合どこにも&が入れられる場所がないように思えます。
どのようにすれば、このプログラムはきちんと動くのでしょうか。
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstring>
#include<cstdlib>
using namespace std;
class samp {
char *s;
public:
samp() { cout << "a"; s = '\0'; }
~samp() { if (s) free(s); cout << "sを開放する\n"; }
void show() { cout << s << "\n"; }
void set(char* str);
};
void samp::set(char* str) {
s = (char*)malloc(strlen(str) + 1);
if (!s) {
cout << "メモリ割り当てエラー\n";
exit(1);
}
strcpy(s, str);
}
samp input() {
char s[80];
samp str;
cout << "文字列の入力: ";
cin >> *s;
str.set(s);
return str;
}
int main()
{
samp ob;
ob = input();
ob.show();
return 0;
}
というプログラムを書いたところ、 a のみしか表示されません。
参照の&だけ使えば解決できるらしいのですが、この場合どこにも&が入れられる場所がないように思えます。
どのようにすれば、このプログラムはきちんと動くのでしょうか。