字符串"My C program " 怎么是14个字节呢?

[复制链接]
3450|9
 楼主| 新好男孩 发表于 2007-8-1 16:52 | 显示全部楼层 |阅读模式
SendCommString("My C program ", 0);
字符串"My C program " 怎么是14个字节呢?
而不是15个字节.
xwj 发表于 2007-8-1 16:53 | 显示全部楼层

应该是15字节

BitFu 发表于 2007-8-1 17:06 | 显示全部楼层

长度是14个字节,但内存中占15个字节

因为最后还有一个0
computer00 发表于 2007-8-1 18:22 | 显示全部楼层

你的函数遇到0就停止输出了。0就是结束的标志.

 楼主| 新好男孩 发表于 2007-8-1 18:32 | 显示全部楼层

谢谢!

哦!
知道了
 楼主| 新好男孩 发表于 2007-8-1 18:45 | 显示全部楼层

请看函数原型.

void SendCommString(unsigned char *base, const unsigned char size);

那size是等于14呢还是等于15??
这样调用函数:
SendCommString("My C program ", 14);
串行口输出:
4D 79 20 43 20 70 72 6F 67 72 61 6D 0D 0A
而这样调用函数:
SendCommString("My C program ", 15);
串行口输出:
4D 79 20 43 20 70 72 6F 67 72 61 6D 0D 0A 00

真是搞不懂字符串的长度是14还是15??

 楼主| 新好男孩 发表于 2007-8-1 18:47 | 显示全部楼层

函数的定义

// 发送一个字符串
/*****************************************************************
Function    : SendCommString()
Description    : 把所指向的存储区中的数据拷贝到缓冲区中
Parameters    : base – 指针指向要拷贝数据的头地址
                size – 所要拷贝数据的数量
Returns        : 无
*****************************************************************/
void SendCommString(unsigned char *base, const unsigned char size)
{
      unsigned char i = 0;
    unsigned char ArraySize;

    if (size)
    {
        ArraySize = size;
    }
    else
    {
        ArraySize = strlen(base);
    }

    if ( !ArraySize || (base == NULL) )
    {
        return;    // 试参数是否有效
    }

    if (SendStruct.SendBufferTail == SendStruct.SendBufferHead)
    {
        Sendit = 1;    /*置位发送标志*/
    }

    while ( i < ArraySize )
    {    // 当缓冲区有空间且数据区中还有数据时,进行拷贝
        SendStruct.SendBuffer[SendStruct.SendBufferTail] = base; // 拷贝当前字节
        i++;
        SendStruct.SendBufferTail++;    // 移动指针
        if (SendStruct.SendBufferTail == SENDMAXSIZE)// 指针是否超出范围
        {
            SendStruct.SendBufferTail = 0;
        }
    }

    if (Sendit) // 是否要传输一个字节
    {
        SBUF = SendStruct.SendBuffer[SendStruct.SendBufferHead];    
    }
}
computer00 发表于 2007-8-1 23:04 | 显示全部楼层

晕了...这函数不是很清楚了吗?自己运行一遍就知道结果了。

一朝成名 发表于 2007-8-1 23:21 | 显示全部楼层

C 语言书里很多着个习题的看看吧呵呵

记不太清楚了

太阳之母 发表于 2007-8-2 00:25 | 显示全部楼层

嘿嘿

你再这样调用函数:
SendCommString("My C program ", 250);
看看串行口输出会是什么?呵呵
先把代码看明白了再问问题,不要想当然, 你以为你的SendCommString()函数就是printf函数啊!在你的函数里不是非的要输出size个字符吗?C可是很听话的,它可不管什么0不0的,你的函数里让它输出size个字符,那它就按顺序给你输出这么多呗,0也是字符嘛,不够的话,0后面的字符也会给你输出的,结束不结束的,关0屁事?
printf不一样,printf函数里可是人为的把0作为结束标志了,而且你也不可以指定它给你输出多少字符。0的前面有几个给你输出几个。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

25

主题

136

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部