我想对此数组进行排序,但如果我没有在数组中放入任何带有特殊字符的字符串,则此代码可以正常工作。 如果我有像
这样的东西!它不会工作。它在Visual Studio中崩溃。\“#$%&安培;'()* +, - / 0123456789:;?< => @
以下是代码:
#include <iostream>
#include <cstring>
using namespace std;
int main (){
char data[10][40] = {
"",
"Welcome",
" !\"#$%&'()*+,-./0123456789:;<=>?@",
"aBCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`",
"abcdefghijklmnopqrstuvwxyZ{||||||||||}",
"CD_ROM",
"ROM",
"SCS",
"3.5 Floppi",
""
};
cout<<"Printing the array as is"<<endl<<endl;
for (int i=0; i<10; i++){
cout<<data[i]<<endl;
}
cout<<endl<<"Ordering the data in Alphabetical order"<<endl<<endl;
// bubble sort
for (int i=0 ; i<10-1 ; ++i) {
char Tcopy[17];
for (int j=i+1 ; j<10 ; ++j) {
if (strcmp(data[i], data[j]) > 0) {
strcpy(Tcopy, data[i]);
strcpy(data[i], data[j]);
strcpy(data[j], Tcopy);
}
}
}
cout<<"Printing the array Sorted"<<endl<<endl;
for (int i=0; i<10; i++){
cout<<data[i]<<endl;
}
// Pause
cout<<endl<<endl<<endl<<"Please Close Console Window"<<endl;
cin.ignore('\n', 1024);
return(0);
}
答案 0 :(得分:1)
char data[10][40]
…
char Tcopy[17];
…
strcpy(Tcopy, data[i]);
有你的问题。您的Tcopy
数组太短。您正在将(可能)40个字符复制到17个字符的数组中。你正在覆盖缓冲区的末尾,导致谁知道什么是伤害。
尝试:
char Tcopy[40];