当前位置: 首页 > 知识库问答 >
问题:

linux - C语言——这两种情况下该如何进行指针操作?

周辰沛
2023-06-10

我在main函数中定义了变量

unsigned int *lp = NULL;

然后调用了函数A,函数A的定义如下

int A(const char *cp, unsigned int *lp)
{
    /**cp是传进来的字符串*/
    char cps[] = *cp;

    /*对*lp做位操作*/
    *lp << 8;
}

编译时Asan检查两处报错如下:
image.png

image.png
我有这些问题:
1.使用数组接收字符串为什么会报非法初始化?
2.第二处位操作的部分,我是想要在这里改变这个指针变量所指向的值,这个写法应该是不对的,但为什么会报内存错误呢?
3.位操作这一步,想实现改变指针变量指向值都可以有哪些写法呢?

共有2个答案

许出野
2023-06-10

c语言字符数组是不能接收字符串的,数组定义首先要规定数组大小。

司徒焕
2023-06-10
  1. char[] = "xxxx"; 是可以的,char[] = cp; 不可以。
  2. *lp 要读取 lp 内所保存的地址的值,而 lp 保存的地址是 NULL ,不可读。
  3. *lp = *lp << 8;, *lp <<= 8;
 类似资料:
  • 下面为了让大家更好的理解上面两个概念,我们来举几个例子来查看一下。 解释第一个概念:大小一样的盒子存储指针 代码如下 我们声明了两个类型的变量,它们的类型是不同的。我们通过sizeof来查看这两个指针变量的大小。 #include <stdio.h> int main(){ int *p1; char *p2; printf("the p1 is %u, th

  • 你好,我正在学习OOP,通过编写一个虚拟的库管理项目在Java。 在serachBook()中,如果在ArrayList中找到book,则返回book对象,如果未找到,则抛出自定义异常BookNotFound。 问题1:它应该只返回null并在调用代码时检查返回值是否为null,还是抛出自定义异常BookNotFound。 目前我认为BookNotFinder是合适的,并且目前正在这样做。然而,我

  • 这是我的建筑。格雷德尔: 我试图找出问题所在,使用以下代码来分析问题: 结果是:

  • 我在使用fs.readfile进行同步时遇到了一个问题,他们没有在第一次初始化,如果我再次尝试请求,那么我就有结果了。我知道我可以用promise和我从Kriskowal找到一些有用的东西。我试过但没有成功。我不太明白如何实施它。如果有人能帮忙,我将永远感激。 代码:

  • 事件处理程序添加到GameGui.java类的GridPane中,从第82行开始。 基本上,我试图找到您在网格窗格中拖动这个对象的任何节点的索引。通过将SetonMouseEnter应用到gridpane中的每个节点,我可以在不拖动的情况下完成这一任务,但是当我试图利用SetonMouseDragEnter时,我什么也没有得到。 有人有办法让这个工作吗? 这些是我应用于GridPane中节点的事件

  • 多级指针概述 我们将指针变量理解为一个存储地址的变量。如果这个地址里面存储的依然是地址,那么我们就可以定义一个二维指针。通过一个二维指针,我们通过两次寻址操作就可以找到这个值。 比如我们定义一个int **p;这是一个二维指针,当编译器看到p的时候,它知道这是一个指针变量,指向一个地址;当它看到第二个的时候,它知道指向的地址里面依然还是地址。如下图所示: 如果我们将p[0]和p[1]分别指向两个字