打印

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

[复制链接]
2776|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
新好男孩|  楼主 | 2007-8-1 16:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
xwj| | 2007-8-1 16:53 | 只看该作者

应该是15字节

使用特权

评论回复
板凳
BitFu| | 2007-8-1 17:06 | 只看该作者

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

因为最后还有一个0

使用特权

评论回复
地板
computer00| | 2007-8-1 18:22 | 只看该作者

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

使用特权

评论回复
5
新好男孩|  楼主 | 2007-8-1 18:32 | 只看该作者

谢谢!

哦!
知道了

使用特权

评论回复
6
新好男孩|  楼主 | 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??

使用特权

评论回复
7
新好男孩|  楼主 | 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];    
    }
}

使用特权

评论回复
8
computer00| | 2007-8-1 23:04 | 只看该作者

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

使用特权

评论回复
9
一朝成名| | 2007-8-1 23:21 | 只看该作者

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

记不太清楚了

使用特权

评论回复
10
太阳之母| | 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

粉丝