删除数组时strncpy char字符串问题
strncpy char string issue when deleting the array
我不知道,这个错误有问题。但是,我认为我应该在删除 []cpp
之前删除 uName[]
。我该怎么做?
#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <string.h>
using namespace std;
class cppUr
{
public:
void writeName(char nm[]);
char * readName();
private:
char uName[80];
};
void cppUr::writeName(char nm[])
{
strncpy(uName, nm, 79);
}
char * cppUr::readName()
{
return uName;
}
主要是:
int main()
{
char name0[100];
char name1[100];
char name2[100];
char name3[100];
cppUr *cpp = new cppUr[3];
cout << "Input first name: "<<endl;
cin.getline(name0, 100);
cpp[0].writeName(name0);
cout << "Input second name: " << endl;
cin.getline(name1, 100);
cpp[1].writeName(name1);
cout << "Input third name: " << endl;
cin.getline(name2, 100);
cpp[2].writeName(name2);
cout << "Input fourth name: " << endl;
cin.getline(name3, 100);
cpp[3].writeName(name3);
for (int i = 0; i < 4; i++)
{
cpp[i].readName();
cout << "The "<<i<<" name " << cpp[i].readName() << endl;
}
delete[] cpp;
system("PAUSE");
return 0;
}
错误是:
HEAP CORRUPTION DETECTED: after Normal block(#148) at 0x0059E1E0.
CRT detected that the application wrote to memory after end of heap buffer
错误很简单。
您使用 3 个元素从 ccpUr 创建数组,但是在使用了其中的 4 个之后。
当然c++是基于null的索引语言,但这意味着最后一个是不可用的。这就是为什么在你的 for 循环条件中必须使用相同的数字,就像在数组分配中一样,即 3.
想一想,当[3]够4个元素时,[2]够3个元素,然后[1]够2个元素,[0]够1个元素?你感觉到了吗?零大小数组是不够的。
问候
我不知道,这个错误有问题。但是,我认为我应该在删除 []cpp
之前删除 uName[]
。我该怎么做?
#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <string.h>
using namespace std;
class cppUr
{
public:
void writeName(char nm[]);
char * readName();
private:
char uName[80];
};
void cppUr::writeName(char nm[])
{
strncpy(uName, nm, 79);
}
char * cppUr::readName()
{
return uName;
}
主要是:
int main()
{
char name0[100];
char name1[100];
char name2[100];
char name3[100];
cppUr *cpp = new cppUr[3];
cout << "Input first name: "<<endl;
cin.getline(name0, 100);
cpp[0].writeName(name0);
cout << "Input second name: " << endl;
cin.getline(name1, 100);
cpp[1].writeName(name1);
cout << "Input third name: " << endl;
cin.getline(name2, 100);
cpp[2].writeName(name2);
cout << "Input fourth name: " << endl;
cin.getline(name3, 100);
cpp[3].writeName(name3);
for (int i = 0; i < 4; i++)
{
cpp[i].readName();
cout << "The "<<i<<" name " << cpp[i].readName() << endl;
}
delete[] cpp;
system("PAUSE");
return 0;
}
错误是:
HEAP CORRUPTION DETECTED: after Normal block(#148) at 0x0059E1E0. CRT detected that the application wrote to memory after end of heap buffer
错误很简单。
您使用 3 个元素从 ccpUr 创建数组,但是在使用了其中的 4 个之后。
当然c++是基于null的索引语言,但这意味着最后一个是不可用的。这就是为什么在你的 for 循环条件中必须使用相同的数字,就像在数组分配中一样,即 3.
想一想,当[3]够4个元素时,[2]够3个元素,然后[1]够2个元素,[0]够1个元素?你感觉到了吗?零大小数组是不够的。
问候