【问题标题】:About strlen function in C programming关于C编程中的strlen函数
【发布时间】:2014-11-18 09:19:32
【问题描述】:

目前正在为 MPLAB IDE 中的 PIC 单片机编译 C 编程。 我只想计算一个字符串的长度,我正在使用 strlen 函数。但它一直返回值 0。下面是我的编码:

在主循环中我得到了这个函数:

BYTE RXDATA[128];

CountData(RXDATA);

CountData函数如下:

BYTE CountData(BYTE* pData)
{
    BYTE nLen;
    nLen = strlen((char*)pData);
    return nLen;
}

RXDATA 的实际长度通常超过 50,但我的 nLen 总是给我 0。你们知道怎么回事吗? 或者有没有其他的方法来计算长度?

【问题讨论】:

  • 对不起,CountData函数会返回nLen
  • RXDATA 中的数据从何而来?您能否展示如何用数据填充RXDATA,然后调用CountData?
  • strlen() 在遇到'\0' 时停止。检查pData[0]。
  • BYTE 底层的类型和大小是多少,<limits.h> 中的CHAR_BIT 的值是多少?这可能不是问题,但如果 BYTE 是 16 位类型,char 是 8 位类型并且数据是大端,那么您可以很容易地获得零字符串长度。跨度>
  • 我猜你错误地认为strlen 会告诉你数组有多长。 strlen 只是向前计数,一次一个字节,直到遇到一个空(零)字节。如果您的数据不是字符数据,它很容易在数据中间包含空字节。

标签: c pic rs485


【解决方案1】:

首先,您对CountData() 的调用需要将值存储在某处,例如:

int x = countData(RXDATA);

但请考虑一下。无数数百万人每天使用strlen而没有失败。测试过你的代码的人数可能只有低个位数。 您认为问题出在哪里?

:-)

如果您的strlen 返回零,这几乎可以肯定是因为您输入缓冲区的第一个字节是\0,这意味着字符串的长度为零。

临时更改:

BYTE RXDATA[128];
CountData(RXDATA);

变成类似:

BYTE RXDATA[128];
strcpy (RXDATA, "Pax");
int x = CountData(RXDATA); // then check x.

看看会发生什么。我怀疑你会看到三个作为返回值。

【讨论】:

    【解决方案2】:

    也许你真的想要

    int x  = sizeof(RXDATA);
    

    这是一个 gcc 程序(我将其命名为 `dd.c')来演示这一点

    #include <stdio.h>
    
    unsigned char RXDATA[80];
    
    int main () {
        printf(" sizeof RXDATA = %d\n", (int) sizeof(RXDATA));
    }
    

    编译

    $ gcc dd.c -o ddd
    

    运行它

    $ ./ddd
     sizeof RXDATA = 80
    $  
    

    另见相关话题sizeof- function or macro?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-15
      • 1970-01-01
      • 2015-05-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多