小编Rob*_*oni的帖子

C %p 打印 16 个字节而不是 8 个字节

我需要打印一个指针的地址。这是我的代码?

float arr[5] = {1.2 , 2.3 , 5 , 7.1 , 9.6};
float *ptrarr;
ptrarr = &arr[0];

printf("Address of ptrarr+2=%p,%p \n\n",ptrarr+2,&arr[2]);
Run Code Online (Sandbox Code Playgroud)

我知道指针地址有 8 个字节,但我的输出总是 16 个字节。这是输出

Address od ptarr+2=000000000061FDE8,000000000061FDE8
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下吗?

c printf pointers

4
推荐指数
1
解决办法
162
查看次数

来自返回数组最大值的函数的 C 分段错误

我只有一个函数可以找出整数数组的最大值,但是我得到了一个分段错误,我找不到它,因为编译器没有向我显示错误行。

这是我的 C 代码:

#include <stdlib.h>
#include <stdio.h>

//Funktion ermittelt den größten Wert eines Arrays
int groesstesElement(int **arrayPointer){
    int max = 0;
    for (int i = 0; i < 3; i++) {
        if (*arrayPointer[i]>max) {
            max = *arrayPointer[i];
        }
    }
    return max;
}


int main (int argc, char **argv) {
    int array[4]={1,2,3,4};
    int *ptr = array;
    int z = groesstesElement(&ptr);
    printf("%d\n", z);

    return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

我使用 macOS 和 VSC。

c arrays max segmentation-fault

4
推荐指数
1
解决办法
70
查看次数

“+CEREG”未经请求的消息的正常行为是什么?

我的服务器正在从 Telit ME910C1 LTE Cat-M 调制解调器接收数据。该装置放置在行驶中的车辆上。

有时响应会延迟收到,当它按时收到响应时,小区 ID 会发生变化。

请帮我缩小这个问题的范围:我需要对下面代码部分中附加的消息进行解释+CEREG。

+CEREG: 1,"4CO3","AD9C30F",8 T:(0:43:36)  // server delay starts now 
+CEREG: 1,"4C01","AE25C11",8 T:(0:47:36)
+CEREG: 1,"4C01","AE15E10",8 T:(0:49:58)
+CEREG: 1,"4CO3","AE2DA10",8 T:(0:50:13)
+CEREG: 1,"4CO3","AE2DAOF",8 T:(0:52:30)
+CEREG: 1,"4CO3","AE1D010",8 T:(0:52:48)
+CEREG: 1,"4CO3","AE19611",8 T:(0:54:48)
+CEREG: 1,"4CO3","AE1960F",8 T:(0:56:9) 
+CEREG: 1,"4CO3","AE19610",8 T:(0:57:54)
+CEREG: 1,"4CO3","AE26611",8 T:(0:58:27)
+CEREG: 1,"4CO3","AE19610",8 T:(0:58:38)
+CEREG: 1,"4CO3","AE26610",8 T:(0:58:48)
+CEREG: 1,"4CO3","AE1B411",8 T:(1:2:9)
+CEREG: 1,"4CO3","AE1B40F",8 T:(1:3:47) 
+CEREG: 1,"4CO3","AE1B415",8 T:(1:4:23)
+CEREG: 0 T:(1:7:27)
+CEREG: 0 T:(1:7:51)
+CEREG: 2 T:(1:7:52)
+CEREG: 1,"4CO3","AE1B415",8 T:(1:7:52) 
+CEREG: 2,1,"4CO3","AE1B415",8 T:(1:8:1)  // …
Run Code Online (Sandbox Code Playgroud)

at-command lte

3
推荐指数
1
解决办法
1874
查看次数

SIM800l - 禁用“短信就绪”和“呼叫就绪”未经请求的消息

我的问题与 SIM800 连接消息有关。

我使用的是STM32开发板的模块。有时模块会分别报告SMS Ready和Call Ready消息。当我开始向模块发送 AT 命令时,它可能会发送这些消息(并非每次都会发生)。

然而,我之前发送的命令显然是不相关的(例如 HTTP 命令),并且SMS Ready / Call Ready消息在意想不到的情况下即将到来。

因此,Keil"Can not access"在调试会话中报告消息。是否可以在建立连接时禁用这些消息?或者这意味着模块意外重置?

stm32 at-command keil sim800

3
推荐指数
1
解决办法
5443
查看次数

在 C 中使用 INSIDE 函数

小查询:在 Python 中,我知道您可以通过以下方式检查 chara是否在数组内b:

 b = ['a', 'b', 'c', ...] # would be filled with letters
 if str(a) in b:
      # instructions.
Run Code Online (Sandbox Code Playgroud)

在 C 语言中是否有类似的运算符或方法?

c arrays char

3
推荐指数
1
解决办法
93
查看次数

将 32 位数字转换为四个 8 位数字

我正在尝试将来自设备的输入(始终为 1 到 600000 之间的整数)转换为四个 8 位整数。

例如,

如果输入是 32700,我想要188 127 00 00.

我通过使用实现了这一点:

32700 % 256 
32700 / 256 
Run Code Online (Sandbox Code Playgroud)

以上工作到 32700。从 32800 开始,我开始得到不正确的转换。

我对此完全陌生,并希望得到一些帮助以了解如何正确完成此操作。

c 32-bit bit

3
推荐指数
1
解决办法
4506
查看次数

dpkg can't install pgAdmin4-web on my debian

I tried installing pgadmin4 on debian10 and it reported:

dpkg: error processing archive /var/cache/apt/archives/pgadmin4-web_4.24_all.deb (--unpack):
trying to overwrite '/etc/apache2/conf-available/pgadmin4.conf', which is also in package pgadmin4-apache2 4.23-1.pgdg100+1
Run Code Online (Sandbox Code Playgroud)

截屏

pgadmin-4

3
推荐指数
1
解决办法
1305
查看次数

如何正确使用timerfd?

我与 zmq 一起使用timerfd。

如何使用计时器timerfd_create并timerfd_set等待一秒钟(https://man7.org/linux/man-pages/man2/timerfd_create.2.html)?

我已经浏览了链接,但我仍然不明白如何初始化一个计时器,该计时器在创建和设置时每滴答等待一秒。这正是我的任务:

我们用 启动一个计时器timerfd_create(),即 1/秒。滴答作响。当使用计时器设置计时器时,_set_(..)计数器会简单地增加,而每次滴答都会减少。当计数器达到 0 时,计时器就到期了。

在这个项目中,我们有一个函数timer _ set _(),其中定时器是通过函数timerfd_create和设置的timerfd_settimer()。我希望你可以帮助我。

这是我的进度(我的代码的一部分):

    struct itimerspec timerValue;

    g_items[n].socket = nullptr; 
    g_items[n].events = ZMQ_POLLIN;

    g_items[n].fd = timerfd_create(CLOCK_REALTIME, 0);
    if(g_items[n].fd == -1 ){
        printf("timerfd_create() failed: errno=%d\n", errno);
        return -1;
    }  

    timerValue.it_value.tv_sec = 1;
    timerValue.it_value.tv_nsec = 0;
    timerValue.it_interval.tv_sec = 1;
    timerValue.it_interval.tv_nsec = 0;

    timerfd_settime(g_items[n].fd,  0, &timerValue, NULL); 
Run Code Online (Sandbox Code Playgroud)

c linux timer zeromq

3
推荐指数
1
解决办法
9889
查看次数

C 编程:为什么 printf 格式说明符 %s 对数字“123”无效?

我是一个 C 编程新手。

通过其他问题的答案,我可以理解“角色”一词可能指向不同的元素;例如字母和数字。

我将“字符串”视为字符。

然后,请看以下几行:

#include <stdio.h>

main()
{
    int numbers = 123;
    printf("%c%s\n", "N", numbers); 
}
Run Code Online (Sandbox Code Playgroud)

当我尝试编译此代码时,显示错误消息并且编译失败。

教科书“C 编程语言”第 13 页对 printf 格式说明符的说明如下;

“%c为性格”

“%s为字符串”。

第一个问题:

虽然“N”是一个字符,但为什么%c说明符无效?

第二个问题:

尽管变量“numbers”的值为“123”,但它们是数字,包含在字符中。

我认为字符等于“字符串”。

那么,虽然我用 %s 表示“123”,但为什么无效呢?

我知道我的代码会起作用,如果我像下面那样修改它们:

#include <stdio.h>

main()
{
    int numbers = 123;
    printf("%s%d\n", "N", numbers); 
}
Run Code Online (Sandbox Code Playgroud)

但我想了解为什么上面的代码无效。

c printf

3
推荐指数
2
解决办法
388
查看次数

C 中的嵌套 if 语句 - 为什么它不评估最后一个 else if?

else if当您分配给choicevalue时,以下代码不会执行最后一条语句3。

#include<stdio.h>
#include<stdlib.h>

int main() {
    puts("Specify with a number what is that you want to do.");
    puts("1. Restore wallet from seed.");
    puts("2. Generate a view only wallet.");
    puts("3. Get guidance on the usage from within monero-wallet-cli.");

    unsigned char choice;
    choice = getchar(); 
 
    if ( choice == '1' ) {
        system("nice -19 ~/monero-x86_64-linux-gnu-v0.17.2.0/monero-wallet-cli --testnet --restore-deterministic-wallet"); 
        exit(0);
    }
    else if ( choice == '2' ) {
        system("nice -19 ~/monero-x86_64-linux-gnu-v0.17.2.0/monero-wallet-cli --testnet --generate-from-view-key wallet-view-only");
        exit(0);
    }
    else …
Run Code Online (Sandbox Code Playgroud)

c if-statement control-flow

3
推荐指数
1
解决办法
64
查看次数