回 帖 发 新 帖 刷新版面

主题:代码编写与老师讲解的无出入,为何调试时出现以下问题

/*编写函数,对具有十个元素的char型数组,从下标4开始的元素全部重设为*,假设数组是char C[10]={'A','B','C','D','E','F','G','H','I','J'}
编写一个改变的函数和一个输出的函数*/

#include"stdio.h"
#define M 10
#define N 4
    void main()
    {
        void setstar(char *,int);
        void output(char *,int);    
        char a[M]={'A','B','C','D','E','F','G','H','I','J'};
        setstar(&a[4],M-N);
        output(a,M);
    }
    void setstar(int *p,int n)
    {
        int i;
        for(i=0;i<M-N;i++)
                     *(p+i)='*';

    }
           void output(int*p,int n)
    {
        int i;
        for(i=0;i<n;i++)
            printf("%d",*(p+i));
    }
    错误显示为数组练习1.obj : error LNK2001: unresolved external symbol "void __cdecl output(char *,int)" (?output@@YAXPADH@Z)
外部函数不确定?    为什么啊,请前辈们赐教

回复列表 (共3个回复)

沙发

指针p指向的是字符数组,char *p
printf("%d",*(p+i));这句也改改,要不输出的全是ascii码,%c

板凳

[quote]C:\Documents and Settings\Administrator\桌面\test>gcc -Wall foo.c
foo.c:4:10: warning: return type of 'main' is not 'int'
foo.c:12:10: error: conflicting types for 'setstar'
foo.c:6:14: note: previous declaration of 'setstar' was here
foo.c:19:17: error: conflicting types for 'output'
foo.c:7:14: note: previous declaration of 'output' was here
[/quote]
这样很容易就看出错误了,
前面是这样声明的
        void setstar(char *,int);
        void output(char *,int);    
而后面是这样定义这两个函数的
        void setstar(int *p,int n) {...}
        void output(int*p,int n) {...}
很明显,编译器以为是多次定义了setstar,optput函数。然而却是有没有重复定义,只是类型不匹配而已。故会出现错误。

3 楼


楼上正解!!!

我来回复

您尚未登录,请登录后再回复。点此登录或注册