我写了一段代码:
int main()
{
long long a = 1a1b2a2b3a3b4a4b;
long *p1;
long *p2;
long *p3;
long *p4;
*p1 = 1a1b;
*p2 = 2a2b;
*p3 = 3a3b;
*p4 = 4a4b;
*p1 = &p2;
*p2 = &p3;
*p3 = &p4;
printf("Die folgende Zahl : %11x", &p1, &p2, &p3, &p4);
}
并收到此错误:
整数常量上的无效后缀“1a1b2a2b3a3b4a4b”
任何人都可以帮忙解决我的错误吗?
答案 0 :(得分:1)
虽然您还没有解释您在该代码中尝试做什么,但我会尝试简要说明您收到该错误的原因。
您正在声明long long
类型的变量,并为其指定值1a1b2a2b3a3b4a4b
。通常,当您为变量赋值时,应该输入十进制值,正如您所看到的,1a1b2a2b3a3b4a4b
不是十进制。
首先,在ubuntu中使用cc进行编译,返回错误:
无效后缀" a1b2a2b3a3b4a4b"在整数常量
请注意,第一个1
未显示。
在为类型为long
的变量赋值时,编译器需要一个整数文字(或long
的整数文字+后缀L)。您的问题是编译器将第一个1
理解为整数文字,将a1b2a2b3a3b4a4b
理解为后缀。由于此后缀不存在,您将收到错误。
我假设您要做的是将十六进制值1a1b2a2b3a3b4a4b
分配给变量a
。如果这是您要执行的操作,则应指定您输入的值为十六进制。这样做的方法是在值之前添加0x
前缀,所以它看起来像这样:
long long a = 0x1a1b2a2b3a3b4a4b;
有关有效整数文字here的更多信息。
无论如何,你的代码中还有很多其他的错误,例如在指定指针所指向的内容之前为指针指向一个值。
答案 1 :(得分:0)
为变量指定十六进制值时,需要在其前面添加0x
- 如:
long long a = 0x1a1b2a2b3a3b4a4b;
然而,最糟糕的是:
long *p1;
.....
*p1 = 1a1b; // note: should be 0x1a1b
在这里定义指针p1
,然后为指针指向的内存赋值。这是一个巨大的错误,因为指针未初始化,即不指向任何合法的记忆。
您需要先分配内存,例如:
long *p1 = malloc(sizeof(*p1));
*p1 = 0x1a1b;
....
free(p1);