字符数组的错误初始化字符串太长 [-fpermissive]
Posted
技术标签:
【中文标题】字符数组的错误初始化字符串太长 [-fpermissive]【英文标题】:Error initializer-string for array of chars is too long [-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;
错误出现在最后一行。
谢谢。
【问题讨论】:
【参考方案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”,看看这个问题:***.com/questions/8843818/…。所以“答案”确实回答了这个问题,因为它正确地说明了为什么该代码会从该编译器中得到错误。以上是关于字符数组的错误初始化字符串太长 [-fpermissive]的主要内容,如果未能解决你的问题,请参考以下文章
ORA-01704: 字符串文字太长,插入语句SQL中,报这样的错误?怎么解决?
C# - REST POST API - 错误 - 无效的 URI:Uri 字符串太长