C++ 尝试删除字符时出现运行时错误*
我有一段代码:C++ 尝试删除字符时出现运行时错误*,c++,memory-leaks,char,delete-operator,C++,Memory Leaks,Char,Delete Operator,我有一段代码: cout<<"Enter first name (maximum "<<MAX_LENGTH<<" letters):"; cin>>name; cin.ignore(); name[MAX_LENGTH] = '\0'; fName = new char [strlen(name)]; strcpy(fName, name); delete [] fName; cout如果name声明为char name[MAX_LENGTH]
cout<<"Enter first name (maximum "<<MAX_LENGTH<<" letters):";
cin>>name;
cin.ignore();
name[MAX_LENGTH] = '\0';
fName = new char [strlen(name)];
strcpy(fName, name);
delete [] fName;
cout如果name
声明为char name[MAX_LENGTH]
,则最大索引可以是MAX_LENGTH-1
,因为数组具有基于零的索引。使用
超出限制访问内存。使用
name[MAX_LENGTH-1]= '\0';
此外,您的姓名
应具有MAX_LENGTH-1
字符
cout<<"Enter first name (maximum "<<MAX_LENGTH-1<<" letters):";
cout
问题是strcpy需要strlen(名称)+1个字符(额外一个字符用于结尾0)。了解C字符串表示法
fName = new char [strlen(name)];
strcpy(fName, name);
delete [] fName;
您分配了一个长度为strlen(name)
的数组,但随后复制了strlen(name)+1个字符。这是因为strlen()。但是strcpy
复制空终止符
这意味着对strcpy的调用超出了缓冲区的末尾,之后程序的行为未定义。usename[MAX_LENGTH-1]='\0'代码>。我很确定运行时错误发生在这里strcpy(fName,name)代码>
fName = new char [strlen(name)];
strcpy(fName, name);
delete [] fName;
fName = new char [strlen(name)];
strcpy(fName, name);
delete [] fName;