先上代码
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
const int MAXN = 26;
int appear[MAXN];
char ans[MAXN], tmp[MAXN];
void solve() {
memset(appear, 0, sizeof appear);
int l = strlen(tmp);
printf("l=%d\n",l);
for (int i = 0; i<l; i++) {
printf("tmp[%d]=%c\n",i,tmp[i]);
if (!appear[tmp[i] - '0']) {
appear[tmp[i] - '0'] = 1;
}
}
printf("%s\n",tmp);
}
int main(int argc, char const *argv[]){
freopen("in.txt","r",stdin);
scanf("%s",tmp);
printf("%s\n",tmp);
solve();
printf("%s\n",tmp);
return 0;
}
我用来测试的数据是LXFEYKGNJRXIAATYUH
出现的错误很有意思,tmp在原来的基础上在末尾多出一个乱码
原因:
在solve函数中appear数组越界,数组越界可能造成任何情况。
在这里,可能tmp数组恰好在appear数组的后面,所以appear数组越界后将数据1写到了tmp数组中,所以程序没有崩溃,出现了奇怪的乱码。在不同的机器上可能会不一样。
这个错误很难发现,找了很久才找出来。
记住:数组下标越界可能发生任何情况,因为你不知道越界的那块内存的状态。