zoukankan      html  css  js  c++  java
  • malloc error:初始值设定元素不是常量

    #include <stdio.h>
    #include <stdlib.h>
    
    char *buf = (char *)malloc(BUFSIZ); 
    
    setbuf(stdout,buf);
    printf("Set STDOUT full buffer OK!
    ");
    setbuf(stdout,NULL);
    printf("Set STDOUT no buffer OK!
    ");

    运行出错:

    [zbq@centos6~/test]$ gcc buffer.c 
    buffer.c:18: 错误:初始值设定元素不是常量
    buffer.c:20: 警告:数据定义时没有类型或存储类
    buffer.c:20: 警告:函数声明中出现形参名却未指定类型
    buffer.c:20: 错误:与‘setbuf’类型冲突
    /usr/include/stdio.h:331: 附注:‘setbuf’的上一个声明在此
    buffer.c:21: 错误:expected declaration specifiers or ‘...’ before string constant
    buffer.c:21: 警告:数据定义时没有类型或存储类
    buffer.c:21: 错误:与‘printf’类型冲突
    buffer.c:21: 附注:带有省略号的形参列表无法与空形参名列表声明匹配
    buffer.c:22: 错误:expected ‘)’ before ‘(’ token
    buffer.c:23: 错误:expected declaration specifiers or ‘...’ before string constant
    buffer.c:23: 警告:数据定义时没有类型或存储类
    buffer.c:23: 错误:与‘printf’类型冲突
    buffer.c:23: 附注:带有省略号的形参列表无法与空形参名列表声明匹配

    后来百度得知原因是:

    char *buf = (char *)malloc(BUFSIZ); 
    全局变量buf 的初始化的值应该为一个常量,而malloc返回值是不定的(分配成功则返回指向被分配内存的指针,此存储区中的初始值不确定,否则返回空指针NULL),编译器在编译时无法断言start的初始值是多少,于是就自作主张的用0的代替了。这应该属于全局变量和局部变量的初始化的差异所在的地方。
    只需将char *buf 改成局部变量就可以编译通过了。

    http://zhidao.baidu.com/link?url=WS7VNppnzd1N3YKqL4R6e6jZwf6le_cjkeE5YoXh0pWOAd0oAzlYYM_VEQOzpn2loqufsXaECZBZPs9zBICLea
  • 相关阅读:
    MemCached总结二:数据管理指令
    MemCached总结一:Unbutu操作系统下memcached服务器安装和telnet方式连接memcache
    Laravel5 开启Debug
    状压dp
    树形dp
    区间dp
    线性dp
    背包九讲
    dp求解各种子串子序列
    线段树详解
  • 原文地址:https://www.cnblogs.com/zhanbiqiang/p/4223388.html
Copyright © 2011-2022 走看看