-2

我写了一个代码:

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”

任何人都可以帮助我的错误是什么?

4

2 回答 2

1

尽管您还没有解释您在该代码中尝试执行的操作,但我将尝试简要解释您为什么会收到该错误。

您正在声明一个类型的变量long long并将其赋值为1a1b2a2b3a3b4a4b. 通常,当你给一个变量赋值时,你应该输入十进制的值,你可以看到1a1b2a2b3a3b4a4b不是十进制的。

首先,在ubuntu中用cc编译,返回错误:

整数常量上的无效后缀“a1b2a2b3a3b4a4b”

请注意,第一个1未显示。

long将值分配给类型的变量时,编译器需要一个整数文字(或整数文字 + 后缀 L ) long。您的问题是编译器将第1一个理解为整数文字和a1b2a2b3a3b4a4b后缀。由于此后缀不存在,因此您会收到错误消息。

我假设您要做的是将十六进制值分配给1a1b2a2b3a3b4a4b变量a。如果这就是您想要做的,您应该指定您输入的值是十六进制的。这样做的方法是0x在值之前添加前缀,所以它看起来像这样:

long long a = 0x1a1b2a2b3a3b4a4b;

这里有更多关于有效整数文字的信息。

无论如何,您的代码中还有很多其他错误,例如在指定指针指向的内容之前为指针指向的内容赋值。

于 2017-06-03T08:15:23.573 回答
0

将十六进制值分配给变量时,需要在其前面加上0x- 前缀,例如:

long long a = 0x1a1b2a2b3a3b4a4b;

然而,最糟糕的是:

long *p1;
.....
*p1 = 1a1b;  // note: should be 0x1a1b

在这里,您定义一个指针p1,然后为指针指向的内存分配一个值。这是一个巨大的错误,因为指针未初始化,即指向任何合法内存。

您需要先分配内存,例如:

long *p1 = malloc(sizeof(*p1));
*p1 = 0x1a1b;
....
free(p1);
于 2017-06-03T08:42:24.853 回答