请问这个错误好解决吗? test.c:11: error: invalid application of ‘sizeof’ to incomplete type ‘const char[]’

2014-08-16 11:04:09 +08:00
 xiiing
请问这个错误好解决吗?
test.c:11: error: invalid application of ‘sizeof’ to incomplete type ‘const char[]’
期望输出结果:
sizeof(a):4
sizeof(*a):1
sizeof(*p):4
sizeof(**p):1
不能把const char a[]改为const char a[4],因为实际中数组很长且不确定。

源码如下:
https://gist.github.com/xiiing/9101a15cb70b271dbc45
1181 次点击
所在节点    C
4 条回复
enson110
2014-08-16 11:26:14 +08:00
赋值很奇怪,没有 /0 吧。
char a[] = "ABCD"; 试试这个。
onemoo
2014-08-16 12:14:03 +08:00
如果数组在编译时无法确定大小就会被视为incomplete type,不能对其使用sizeof。
你的a数组是可以确定大小的(因为你指定的内容),所以问题没有出在a上。
问题是在11行,p仅仅是个指向“元素为char的数组”的指针,*p解引用后,就仅仅是个const char[]类型,编译器无法确定它的大小。

LZ要不换个逻辑吧。
XiaoxiaoPu
2014-08-16 15:02:13 +08:00
可以使用gcc扩展的运算符typeof,把第6行换成下面的即可:

```c
typeof(&a) p = &a;
```

但是同时也影响了可移植性
xiiing
2014-08-16 16:37:45 +08:00
@enson110
@onemoo
@XiaoxiaoPu
谢谢大家,原来这个是解决不了的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/128199

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX