标题:char *pS[NUM_P]={NULL}这条代码不算初始化?
只看楼主
lanskyxti
Rank: 1
等 级:新手上路
帖 子:14
专家分:4
注 册:2014-8-29
结帖率:80%
已结贴  问题点数:20 回复次数:17 
char *pS[NUM_P]={NULL}这条代码不算初始化?
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<stddef.h>

const size_t BUFFER_LEN=128;
const size_t NUM_P=100;  //初始化NUM_P=100

int main(void)
{
    char buffer[BUFFER_LEN];
    //int size_t NUM_P;
    char *pS[NUM_P]={NULL}      //初始化指针PS字符串=NULL(报错 variable-sized object may not be initialized )[Warning] excess elements in array initializer     
                                [Warning] (near initialization for `pS')

    char *pbuffer=buffer;        syntax error before "char"   
    int i=0;
    printf("\nYou can enter up to %u message each up to %u characters",NUM_P,BUFFER_LEN-1);
   
    for(i=0;i<NUM_P;i++)
    {
       pbuffer=buffer;
       printf("\nEnter %s message,or press Enter to end\n",i>0?"another":"a");
       while((pbuffer-buffer<BUFFER_LEN-1)&&((*pbuffer++=getchar())!='\n'));
       if((pbuffer-buffer)<2)
       break;
       if((pbuffer-buffer)==BUFFER_LEN && *(pbuffer-1)!='\n')
          {
             printf("String too long -maximum %d characters allowed.",BUFFER_LEN);
             i--;
             continue;
          }
       *(pbuffer-1)='\0';
       pS[i]=(char*)malloc(pbuffer-buffer);
       if(pS[i]==NULL)
       {
         printf("\nOut of menory -ending program.");
         rerurn 1;
       }
       strcpy(pS[i],buffer);
    }
       printf("\nIn reverse order,the strings you entered are:\n");
       while(--i >=0)
       {
          printf("\n%s",pS[i]);
          free(pS[i]);
          pS[i]=NULL;
          }
       system("pause");
       return 0;
}

[ 本帖最后由 lanskyxti 于 2014-8-29 14:49 编辑 ]
搜索更多相关主题的帖子: elements include excess 
2014-08-29 14:33
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
得分:10 
variable-sized object may not be initialized

变长的对象不能初始化

提示是这样子滴
2014-08-29 14:37
lanskyxti
Rank: 1
等 级:新手上路
帖 子:14
专家分:4
注 册:2014-8-29
得分:0 
回复 2 楼 zklhp
我补全了下我的代码,麻烦给我看看为什么初始化不了,问题多多,跟我之前一个类似的代码就没有这个问题
2014-08-29 14:50
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
得分:0 
以下是引用lanskyxti在2014-8-29 14:50:43的发言:

我补全了下我的代码,麻烦给我看看为什么初始化不了,问题多多,跟我之前一个类似的代码就没有这个问题

C99里面这么说的

The type of the entity to be initialized shall be an array of unknown size or an object type
that is not a variable length array type.

简单翻译一下就是 可以被初始化的 要么是未知长度的数组 要么是可变长度的数组

2014-08-29 15:19
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
得分:0 
    char *pS[NUM_P]={NULL}      //初始化指针PS字符串=NULL(报错 variable-sized object may not be initialized )[Warning] excess elements in array initializer     
                                [Warning] (near initialization for `pS')

    char *pbuffer=buffer;        syntax error before "char"  

编译器的提示多么智能啊 告诉你这一行的错误来自前面 你没发现前面没加`;'么
2014-08-29 15:21
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
得分:0 
以下是引用lanskyxti在2014-8-29 14:50:43的发言:

我补全了下我的代码,麻烦给我看看为什么初始化不了,问题多多,跟我之前一个类似的代码就没有这个问题
跟我之前一个类似的代码就没有这个问题


对于这种问题 我一般用【代码不是你想写 想写就能写】来回复

不是说类似就没有问题了 而且你不懂得原理 怎么知道是类似
2014-08-29 15:28
lanskyxti
Rank: 1
等 级:新手上路
帖 子:14
专家分:4
注 册:2014-8-29
得分:0 
回复 6 楼 zklhp
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<stddef.h>

const size_t BUFFER_LEN=128;
const size_t NUM_P=100;

int main(void)
{
    char buffer[BUFFER_LEN];
    char *pS[NUM_P]={NULL};
    char *pbuffer=buffer;
    int i=0;
    printf("\nYou can enter up to %u message each up to %u characters",NUM_P,BUFFER_LEN-1);
   
    for(i=0;i<NUM_P;i++)
    {
       pbuffer=buffer;
       printf("\nEnter %s message,or press Enter to end\n",i>0?"another":"a");
       while((pbuffer-buffer<BUFFER_LEN-1)&&((*pbuffer++=getchar())!='\n'));
       if((pbuffer-buffer)<2)
       break;
       if((pbuffer-buffer)==BUFFER_LEN && *(pbuffer-1)!='\n')
          {
             printf("String too long -maximum %d characters allowed.",BUFFER_LEN);
             i--;
             continue;
          }
       *(pbuffer-1)='\0';
       pS[i]=(char*)malloc(pbuffer-buffer);
       if(pS[i]==NULL)
       {
         printf("\nOut of menory -ending program.");
         rerurn 1;
       }
       strcpy(pS[i],buffer);
    }
       printf("\nIn reverse order,the strings you entered are:\n");
       while(--i >=0)
       {
          printf("\n%s",pS[i]);
          free(pS[i]);
          pS[i]=NULL;
       }
       system("pause");
       return 0;
}
大哥,你有编译么,加了;一样没有用啊。难道是我编译器不支持C99?
2014-08-29 16:07
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
得分:0 
以下是引用lanskyxti在2014-8-29 16:07:46的发言:

大哥,你有编译么,加了;一样没有用啊。难道是我编译器不支持C99?

编译器告诉你 这种情况不能初始化 而且我还给你翻译出来了 你不看

我又把C99规范拿出来 也给你翻译出来 你不看

上面我说 你这里还有错误啊 没加`;' 嘿 这条你看见了 你说加了没用 我前面那些你咋不看 又怀疑起你的编译器是不是支持C99了



空口无凭 我截图给你看啊


[ 本帖最后由 zklhp 于 2014-8-29 16:18 编辑 ]
2014-08-29 16:17
bccn250
Rank: 5Rank: 5
等 级:职业侠客
帖 子:154
专家分:379
注 册:2010-5-25
得分:5 
改成
define NUM_P 100
试试



[ 本帖最后由 bccn250 于 2014-8-29 16:35 编辑 ]
2014-08-29 16:26
lanskyxti
Rank: 1
等 级:新手上路
帖 子:14
专家分:4
注 册:2014-8-29
得分:0 
回复 4 楼 zklhp
大哥,我是C初学者,不要嫌弃我问的问题小白,弄不明白会困扰我很久的,麻烦再解答下。
你说C99 解说:可以被初始化的,要么是未知长度的数组 要么是非可变长度的数组
开始我初始了NUM_P //const size_t NUM_P=100,那么*pS[NUM_P]={NULL}这个属于非可变长的数组等价于*pS[100]={NULL},要么属于未知长度数组



[ 本帖最后由 lanskyxti 于 2014-8-29 17:24 编辑 ]
2014-08-29 17:20



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-435475-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.168960 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved