58 | char tu_data[0]; /* data or error string */ | ^~~~ This occurs because writebuf points to this field and the latter cannot be considered as being of dynamic length because it is not the last field in the structure. Thus it is bounded to its declared size. This ...