1.String函数:
#ifndef CSTRING_H_
#define CSTRING_H_
class CString
{
public:
CString();
CString(const char* str);
CString(const CString &other);
~CString();
CString& operator =(const CString &str);
public:
void ShowString();
private:
char * __Data;
};
#endif
#include "CString.h"
#include "iostream"
using namespace std;
CString::CString()
{
__Data = new char[1];
*__Data = '\0';
}
CString::CString(const char* str)
{
int Length = strlen(str);
__Data = new char[Length + 1];
for (int i = 0; i < Length; i++)
{
__Data[i] = str[i];
}
__Data[Length] = '\0';
}
CString::CString(const CString &other)
{
int Length = strlen(other.__Data);
__Data = new char[Length + 1];
for (int i = 0; i < Length; i++)
{
__Data[i] = other.__Data[i];
}
__Data[Length] = '\0';
}
CString::~CString()
{
delete[] __Data;
}
CString& CString::operator=(const CString &str)
{
if (this == &str)
return *this;
delete[] __Data;
int Length = strlen(str.__Data);
__Data = new char[Length + 1];
for (int i = 0; i < Length; i++)
{
__Data[i] = str.__Data[i];
}
__Data[Length] = '\0';
return *this;
}
void CString::ShowString()
{
cout << __Data << endl;
}
#include "CString.h"
#include <string>
#include "iostream"
using namespace std;
int main()
{
//无参数
CString s;
//有参数
CString s1 ("1,2,3,4");
s1.ShowString();
//拷贝构造函数
CString s2(s1);
s2.ShowString();
//重载=
CString s3 = "3,4,5,6";
CString s4 = s3 = s1;
s3.ShowString();
s4.ShowString();
getchar();
return 0;
}
2.报错:没有找到接受"std::string"类型的右操作数的运算符
解决方法:#include <string>
问题原因:将C中的string,h头文件在C++中使用,导致运算符对>>对string不能辨别。所以应在C++中避免包括C标准库中的.h文件。
3.scanf与scanf_s的区别:
error
此错误的原因是:微软公司自己提供的安全函数scanf_s(),ANSI C中没有scanf_s(),只有scanf()
解决方法总结:1、不用scanf()而改用scanf_s()
scnaf()在读取时不检查边界,可能会存在内存泄漏的问题,而scanf_s()在读取时检查边界是一种更加安全的函数
scanf一般可能遇到的问题:http://bbs.csdn.net/topics/310149436
4.Strcpy函数
#include <assert.h>
char * Strcpy(char* dest, const char* src)
{
assert(dest != NULL&&src != NULL);
char* res = dest;
//char aa = *dest++; //指针后移1位 输出为?23abc 第一个位置存放的是随机值,共占用13个位置
while ((*dest++ = *src++) != '\0');
return res;
}
int main()
{
char a[] = "1,2,3,a,b,c";
char d[14];
Strcpy(d, a);
cout <<d;
system("pause");
return 0;
}