c - strcmp() 给出段错误 : 11 and pointer from integer warning

标签 c segmentation-fault avr strcmp

我的问题是 strcmp() 函数会产生以下问题:

main.c:35: warning: passing argument 1 of ‘strcmp’ makes pointer from integer without a cast

编译和运行程序时执行以下操作:

Segmentation fault: 11

我知道这些错误意味着什么,我只是不知道有任何其他方法可以做到这一点...考虑过使用 itoa() 或 sprintf(),但我需要十六进制的校验和,所以不知道如何我可以做到这一点。

代码如下:

#include "checksum.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
    char nmea[] ="$GPRMC,131637.000,A,5820.0658,N,00834.5652,E,0.00,,090911,,,A*7E";
    unsigned char checksum[] = "00";
    char data[82];
    int length = strlen(nmea);
    int k = 0;
    int i;
    unsigned char XOR;

    checksum[0] = nmea[(length-2)];
    checksum[1] = nmea[(length-1)];

    for(i=1;i < (length-3);i++){
        data[(i-1)] = nmea[i];
    }
    int dataLength = strlen(data);

    for (XOR = 0, i = 0; i < dataLength; i++)   //XORer for å finne checksum
        XOR ^= (unsigned char)data[i];

    printf("*******************************************************\n");
    printf("Calculating checksum...\n");

    printf("Read checksum: %s\n",checksum);
    printf("Read data: %s\n",data);
    printf("Calculated checksum: %X \n",XOR);

    if(strcmp(XOR,checksum) == 0){          //sammenligner checksumer.
        printf("Checksum: OK!\n");
        //return 1;
    }
    else{
        printf("Checksum: Mismatch!\n");
        //return 0;
    }

    printf("*******************************************************\n");
    //nmeachecksum(buf);
    return 0;
}

非常感谢任何帮助!

最佳答案

char XOR[2] = { 0, 0 };

然后只需使用 XOR[0]无处不在。

上面只是我对您的代码实际上尝试执行的操作进行的无段错误重写。

它应该做什么。 。 。 strcmp()正在将二进制文本与相同值的格式化版本进行比较,因此它不起作用。您的unsigned char XOR; (或者可能是 8 位 <stdint.h> 类型)大约是正确的。但将此与 == 进行比较作为标量而不是 strcmp() .

你将它与什么进行比较。 。 。您需要将 NMEA 可打印十六进制转换为适合 == 的标量操作数因此,请使用 sscanf() 或仅打开十六进制转换代码。1

<小时/>

1。许多 stackoverflow 答案中都提供了十六进制输入转换代码示例。

关于c - strcmp() 给出段错误 : 11 and pointer from integer warning,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10094436/

相关文章:

linux - AVRISP MKII 不适用于 Linux 上的 AVRDUDE

在一元 & 中转换相关的无效左值

php - 分析 Apache/PHP 核心转储

c++ - 奇怪的段错误

比较运算符重载中第一个参数为 null 时的 C++ 段错误

c - AVR C串行通信: Print number Fixed Buttons

arduino - 通过I2C向SSD1306写入数据

c - 处理大型矩阵(即 10000x10000 及更大)的最快方法?

c - 跳转到注册并返回 libc

c - 动态规划失败的测试用例