【问题标题】:Error initializer-string for array of chars is too long [-fpermissive]字符数组的错误初始化字符串太长 [-fpermissive]
【发布时间】:2014-12-23 17:44:52
【问题描述】:

我的代码在 Dev-C++ 中编译时出现此错误。

错误是:[Error] 字符数组的初始化字符串太长 [-fpermissive]

部分代码是:

struct ffthdr {
char fftc[4];     // .fft
long fftsize;     // fft size
long windowsize;  // windowsize (<= fftsize)
long hopsize;     // hop size (<=fftsize) 
long dlength;     // original file data length in samples
long srate;       // original file sample rate 
long winType;       // window type 
};

void rfft(float *x, long N, int forward);
void cfft(float *x, long NC, int forward);
void bitreverse(float *x, long N);
int makewindow(int aType, float *win, long length);
int dowindow(float *fdata, float *window, long length);

int main(int argc, char *argv[])   {
float *result,*tempres=0,*window=0;
short *data;
float max,norm=1.0;
long i,time,fsize=1024,wsize=512,hsize=256,nread;
int wavein;
long length,srate,winType=1;
FILE *input, *output;
struct soundhdr hdr;
struct ffthdr fhdr =  {".fft",1024,512,256,0,0,1};

错误出现在最后一行。

谢谢。

【问题讨论】:

    标签: struct


    【解决方案1】:

    这是因为你的字符数组的初始化字符串太长了

    这个

    ".fft"
    

    长度为 5 个字符(包括 NUL)

    你只分配了 4 个:

    char fftc[4];     // .fft
    

    如果你真的想要这四个字符而不需要 NUL,试试

    struct ffthdr fhdr =  {{'.','f','f','t'},1024,512,256,0,0,1};
    

    【讨论】:

    • 从 ANSI C 6.5.7:字符串文字的连续字符(包括终止空字符如果有空间或者如果数组的大小未知) 初始化数组的元素。 那么为什么编译器会忽略标准呢?是的,我看到这是一个 C++ 编译器。
    • 这不是“无视标准”。恰恰相反。它选择在标准允许的情况下犯一些错误,因为它很可能是编码错误,不管标准怎么说。注意“-fpermissive”,看看这个问题:stackoverflow.com/questions/8843818/…。所以“答案”确实回答了这个问题,因为它正确地说明了为什么该代码会从该编译器中得到错误。
    猜你喜欢
    • 2014-02-19
    • 2010-12-14
    • 2013-10-10
    • 2014-10-16
    • 1970-01-01
    • 1970-01-01
    • 2015-12-26
    • 2011-12-11
    相关资源
    最近更新 更多