首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

这段C代码错在哪儿

2013-04-02 
这段C代码错在哪里?就是一个简单的程序把La和Lb合并且没有重复元素,不知道问题出在哪,编译通过了,但是运行

这段C代码错在哪里?
就是一个简单的程序把La和Lb合并且没有重复元素,不知道问题出在哪,编译通过了,但是运行错误,感觉好像是数组越界了?
求指导...


    #include <stdio.h>

    void Union(char *La, char *Lb);
    int ListLength(char *L);
    void GetElem(char *L, int i, char *e);
    int LocateElem(char *L, char *e, int (*comp)(char a, char b));
    int compare(char a, char b);
    void ListInsert(char *, int, char *);

    int main(){
        char *La;
        char *Lb;
        int i;
        for(i = 0; i <= 10; ++i){
            La[i] = i;
            Lb[i] = i + 5;
        }
        La[i] = '\0';
        Lb[i] = '\0';
        Union(La, Lb);
        for(i = 0; La[i] != '\0'; ++i){
            printf("%c\n", La[i]);
        }
        return 0;
    }

    //unite La and Lb without repeat elements
    void Union(char *La, char *Lb){
        int La_length = ListLength(La);
        int Lb_length = ListLength(Lb);
        int i = 0;
        char *e;
        for(i; i<= Lb_length; ++i){
            GetElem(Lb, i, e);
            if(!LocateElem(La, e, compare))
                ListInsert(La, ++La_length, e);
        }
    }

    //caculate the length of L
    int ListLength(char *L){
        int i;
        for(i = 0; *(L + i) != '\0'; ++i);
        return i;
    }

    void GetElem(char *L, int i, char *e){
        *e = *(L + i);
    }

    //search the element e in L, if exist return the location, else return 0
    int LocateElem(char *L, char *e, int (*comp)(char a, char b)){
        int i;


        for(i = 0; *(L + i) != '\0'; ++i){
            if(comp(*(L + i), *e)) return i + 1;
        }
        return 0;
    }

    //compare the element a and b
    int compare(char a, char b){
        if(a == b) return 1;
        return 0;
    }

    //if e doesn't exit in L, insert the e in L
    void ListInsert(char *L, int i, char *e){
        int j;
        for(j = ListLength(L) - 1; j >= i; --j){
            *(L + j + 1) = *(L + j);
        }
        L[ListLength(L)] = '\0';
        *(L + i - 2) = *e;
    }

c
[解决办法]
哥们,你这有些问题了
你把20-23行注释掉,先看看你在main函数里对那可怜的兄弟俩的赋值情况,你调试调试
进入for循环,第一轮赋值程序就得断气儿了。

// 下面写了个例子,不知道合不合你的意思

#define MAX_NUM 11
char  arrA[MAX_NUM] = {0};
char  arrB[MAX_NUM] = {0};

int i = 0;
for( ; i<MAX_NUM; i++)
{
    arrA[i] = 65 + i;
    arrB[i] = 70 + i;
}
arrA[i] = '\0';
arrB[i] = '\0';



后面的大概看了看,感觉有些乱,慢慢调试吧,把这程序调通了,你可以给自己C语言成绩加20分了。
祝你好运!

热点排行