标题:char *pS[NUM_P]={NULL}这条代码不算初始化?
取消只看楼主
lanskyxti
Rank: 1
等 级:新手上路
帖 子:14
专家分:4
注 册:2014-8-29
结帖率:80%
已结贴  问题点数:20 回复次数:5 
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
lanskyxti
Rank: 1
等 级:新手上路
帖 子:14
专家分:4
注 册:2014-8-29
得分:0 
回复 2 楼 zklhp
我补全了下我的代码,麻烦给我看看为什么初始化不了,问题多多,跟我之前一个类似的代码就没有这个问题
2014-08-29 14:50
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
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
lanskyxti
Rank: 1
等 级:新手上路
帖 子:14
专家分:4
注 册:2014-8-29
得分:0 
回复 9 楼 bccn250
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<stddef.h>
//#define BUFFER_LEN 128
#define NUM_P 100
const size_t BUFFER_LEN=128;
//const size_t NUM_P=100;   //为什么改成define申明就可以,两个应该是一个意思啊??? 

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.");
         return 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;
}
     
2014-08-29 17:56
lanskyxti
Rank: 1
等 级:新手上路
帖 子:14
专家分:4
注 册:2014-8-29
得分:0 
回复 13 楼 zklhp
谢谢,你详细的解答。原来const size_t NUM_P=100,定义的是变量NUM_P的值固定是100,NUM_P始终是变量,所以*pS[NUM_P]={NULL}无法初始化,即变量的指针无法初始化。对于我们自学者,一个问题解决不了很容易造成下面的看不下去,如果没有人解答的话,自己看着看着就循环死了。再次谢谢你的解答,希望下次有问题可以找你回答!
2014-08-29 21:54



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




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

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