这错在哪啊?

独孤九剑贰 2013-11-06 12:57:03

#include <stdio.h>

void hello(void)//定义一个无返回值无形参类型的函数hello
{
fprintf(stderr,"Hello!\n");//输出函数
}

void func(void)
{
char *buf[10]; //定义一个无类型指针数组
static int i; //定义静态局部变量i

for(i = 0; i < 30; i++) {
buf[i] = hello;
}
}

int main(void)
{
int buf[1000];//定义一个长度为1000的整型数组

func();//函数调用

return 0;
}
...全文
225 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
Adol1111 2013-11-06
  • 打赏
  • 举报
回复
void指针虽然能容纳全部类型,但是用的时候必须做类型转换。而且你那句只是赋值没有调用。代码的话参考15楼的就好了。不过15楼19行错了,是((PFUN)(buf[j]))(); 建议你了解下函数指针。
lunat 2013-11-06
  • 打赏
  • 举报
回复
把15楼代码改一行: (PFUN)(buf[j]); 改为: ((PFUN)(buf[j]))();
独孤九剑贰 2013-11-06
  • 打赏
  • 举报
回复
引用 15 楼 nightkids_008 的回复:
即使你代码没错也不会有打印的,你的buf[i]=hello,只是赋值,并没有调用。
#include <stdio.h>
  
void hello(void)//定义一个无返回值无形参类型的函数hello
{
    fprintf(stderr,"Hello!\n");//输出函数
}

typedef void (* PFUN)(void) 
void func(void)
{
    void   *buf[10];  //定义一个无类型指针数组
    static    int    i;  //定义静态局部变量i
      
    for(i = 0; i < 10; i++) {
        buf[i] = hello;
    }
    for(int j = 0; j < 10; ++j)
    {
        (PFUN)(buf[j]);
    }
}
  
int main(void)
{
    //int buf[1000];//定义一个长度为1000的整型数组
      
    func();//函数调用
      
    return 0;
}
这能运行?你确定?
nightkids_008 2013-11-06
  • 打赏
  • 举报
回复
即使你代码没错也不会有打印的,你的buf[i]=hello,只是赋值,并没有调用。
#include <stdio.h>
  
void hello(void)//定义一个无返回值无形参类型的函数hello
{
    fprintf(stderr,"Hello!\n");//输出函数
}

typedef void (* PFUN)(void) 
void func(void)
{
    void   *buf[10];  //定义一个无类型指针数组
    static    int    i;  //定义静态局部变量i
      
    for(i = 0; i < 10; i++) {
        buf[i] = hello;
    }
    for(int j = 0; j < 10; ++j)
    {
        (PFUN)(buf[j]);
    }
}
  
int main(void)
{
    //int buf[1000];//定义一个长度为1000的整型数组
      
    func();//函数调用
      
    return 0;
}
xml111 2013-11-06
  • 打赏
  • 举报
回复
看lz的代码,是想定义一个函数指针数组吗? 若是函数指针数组,则修改那个数组定义就可以了,代码如下: #include <stdio.h> void hello(void)//定义一个无返回值无形参类型的函数hello { fprintf(stderr,"Hello!\n");//输出函数 } void func(void) { // char *buf[10]; //定义一个无类型指针数组 void (*buf[10])(void); static int i; //定义静态局部变量i for(i = 0; i < 30; i++) { buf[i] = hello; } } int main(void) { int buf[1000];//定义一个长度为1000的整型数组 func();//函数调用 return 0; }
独孤九剑贰 2013-11-06
  • 打赏
  • 举报
回复
怎么帮忙改下,是的其最后不崩溃,在Ubuntu下运行是输出了一段hello!后 出现段错误,核心已经存储。
独孤九剑贰 2013-11-06
  • 打赏
  • 举报
回复

#include <stdio.h>
 
void hello(void)//定义一个无返回值无形参类型的函数hello
{
    fprintf(stderr,"Hello!\n");//输出函数
}
 
void func(void)
{
    void   *buf[10];  //定义一个无类型指针数组
    static    int    i;  //定义静态局部变量i
     
    for(i = 0; i < 100; i++) {<-------越界/*这怎么越界来着?*/
        buf[i] = hello;
    }    
}
 
int main(void)
{
    int buf[1000];//定义一个长度为1000的整型数组
     
    func();//函数调用
     
    return 0;
}
源程序是这样的,你们自己运行下,可以运行但是最终这程序会崩溃,主要错在数组越界。
独孤九剑贰 2013-11-06
  • 打赏
  • 举报
回复
引用 1 楼 lunat 的回复:
char    *buf[10];  //定义一个无类型指针数组 这叫无类型指针数组? void * buf[30];
打错了,我的错,本来是void * buf[30]这样的
Adol1111 2013-11-06
  • 打赏
  • 举报
回复
完全不明白这程序啥意思 main中的int buf[1000];摆设? static int i;需要static?就当需要吧.... char *buf[10];buf[i]=hello; ? 不是void *也不是函数指针,能buf[i]=hello? 完全意义不明
光流溢彩 2013-11-06
  • 打赏
  • 举报
回复
for(i = 0; i < 30; i++) { buf[i] = hello; } 注释什么的,就自己修改把。

#include <stdio.h>
 
void hello(void)//定义一个无返回值无形参类型的函数hello
{
    fprintf(stderr,"Hello!\n");//输出函数
}
 
void func(void)
{
    char    *buf[10];  //定义一个无类型指针数组
    static    int    i;  //定义静态局部变量i
     
    for(i = 0; i < 10; i++) {
        buf[i] = "hello";
    }    
}
 
int main(void)
{
    int buf[1000];//定义一个长度为1000的整型数组
     
    func();//函数调用
     
    return 0;
}
Henryinferno 2013-11-06
  • 打赏
  • 举报
回复
char *buf[10];——这个为什么认为是无类型?应该像2楼说的void * 而且数组明显会溢出。。
derekrose 2013-11-06
  • 打赏
  • 举报
回复
各种错,连注释都错
zmn0079 2013-11-06
  • 打赏
  • 举报
回复
楼上太厉害了,居然看懂了楼主的意图!
max_min_ 2013-11-06
  • 打赏
  • 举报
回复
地址的数组指针,指针没有分配内存空间吧! 而且写的函数指针也不是这样吧!
junlinfushi 2013-11-06
  • 打赏
  • 举报
回复
引用 2 楼 junlinfushi 的回复:
buf[i] = hello;
这个肯定是错的
首先,你的hello如果是函数的话,那就应该加上括号。可是,你的hello()函数是void型的,所以,你的buf[i] = hello();也是错的
JoeBlackzqq 2013-11-06
  • 打赏
  • 举报
回复
你这程序有错吗,只是变量赋值而已!
junlinfushi 2013-11-06
  • 打赏
  • 举报
回复
buf[i] = hello;
这个肯定是错的
lunat 2013-11-06
  • 打赏
  • 举报
回复
char    *buf[10];  //定义一个无类型指针数组 这叫无类型指针数组? void * buf[30];

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧