我有一本来自C ++书籍的代码片段:
#include<stdio.h>
#include<stdlib.h>
struct S1
{
const char *s;
int i;
struct S1 *slp;
};
main()
{
static struct S1 a[]= {{"abcdef", 1, a+1},
{"ghijkl", 2, a+2},
{"mnopqr", 3, a} };
struct S1 *p = a;
printf("a[0].s = %s p-> = %s a[2].slp->s = %s \n", a[0].s, p->s, a[2].slp->s);
for(int i=0; i<3; i++)
{
printf("--a[i].i = %d ", --a[i].i);
printf("++a[i].s[3] = %c \n", ++a[i].s[3]);
}
}
使用Dev C ++ v5.11,我无法使用错误代码编译它:
[Error] increment of read-only location '*(a[i].S1::s + 3u)'
@Corristo评论的解决方案。
感谢大家的帮助。我下次会得到更好的IDE和书籍。谢谢,@ Tomaz-Canabrava。
答案 0 :(得分:6)
停止使用Dev C ++
获取正确的C ++书籍
请勿使用与Turbo C ++相关的任何内容
有很多好的和免费的书籍,编译器和IDE,因为你在Windows中我会推荐其中一个免费的IDE:
这至少会给你一个现代的C ++,而不是石器时代。 好学习。
答案 1 :(得分:0)
1。 C ++不支持int
中的默认main()
,应将int
添加为返回值:
int main()
{
...
return 0;
}
2。结构S1.s
为const char *
,表示无法更改其值,因此您无法执行++a[i].s[3]
。
答案 2 :(得分:0)
通常,这样的示例具有特定目的,例如,此代码对于特定版本的语言定义有效。
这个可能证明const不是真正的const。作者可能会假设ANSI C ++。
它也可能会破坏特定编译器中的错误。
我会查看您的编译器设置,看看您是否可以将语言更改为更早的标准。