嗨,请帮我这个忙
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int classmatesize=0;
char **classmate1;
char **classmate2;
void checkclassmates(){
int i,j;
for(i=0;i<classmatesize;i++){
for(j=i+1;j<classmatesize;j++){
if(strcmp(classmate1[i],classmate1[j])==0){
strcpy(classmate1[classmatesize],classmate2[i]);
strcpy(classmate2[classmatesize],classmate2[j]);
classmatesize++;
}else if(strcmp(classmate1[i],classmate2[j])==0){
strcpy(classmate1[classmatesize],classmate2[i]);
strcpy(classmate2[classmatesize],classmate1[j]);
classmatesize++;
}else if(strcmp(classmate2[i],classmate2[j])==0){
strcpy(classmate1[classmatesize],classmate1[i]);
strcpy(classmate2[classmatesize],classmate1[j]);
classmatesize++;
}else if(strcmp(classmate2[i],classmate1[j])==0){
strcpy(classmate1[classmatesize],classmate1[i]);
strcpy(classmate2[classmatesize],classmate2[j]);
classmatesize++;
}
}
}
}
int main(void) {
int i;
classmate1 = malloc(1000 * sizeof(char*));
for ( i = 0; i < 1000 ; i++)
classmate1[i] = malloc((1000) * sizeof(char));
classmate2 = malloc(1000 * sizeof(char*));
for ( i = 0; i < 1000 ; i++)
classmate2[i] = malloc((1000) * sizeof(char));
yyparse();
checkclassmates();
print_the_array();
return 0;
}我的yyparse();如果我通过注释checkclassmate函数来打印classmate1和classmate2,它的打印和clasematesize将打印为7
classmate1
[ sania pawan pandu haldiram manas abhi prince ]
classmate2
[ sam pandu madhur arjun jyoti ash sam ]只有当我评论strcpy的指令时,问题才是strcpy,它的工作正常,它给出了分割错误。
我甚至尝试了sprintf而不是strcpy,但我还是搞不清楚。
发布于 2015-10-30 02:06:19
我的预感是这些线
classmatesize++;在checkclassmates中是罪魁祸首。他们有四个人。因为您在循环中递增classmatesize,所以if语句的条件永远不会失败,并且您最终会访问超出界限的数组。
尝试删除这些行,看看问题是否仍然存在。
https://stackoverflow.com/questions/33421338
复制相似问题