字符数组的错误初始化字符串太长 [-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中,报这样的错误?怎么解决?

错误:ORA-01704:字符串文字太长

postgresql 错误:类型字符变化的值太长(256)

C# - REST POST API - 错误 - 无效的 URI:Uri 字符串太长

错误:Windows 上的文件路径太长,请保持在 240 个字符以下

org.postgresql.util.PSQLException:错误:对于类型字符变化的值太长(255)