打印

问个字符串的问题

[复制链接]
2037|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
bogekanpu|  楼主 | 2011-1-12 14:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void UART_Send_Str(char *s)        //串口发字符串
{
int len=strlen(s)-1;
int i;
for(i=0;i<len;i++)
UART_Send_Byte(s[i]);
if(s[i]=='\n')
{
  UART_Send_Enter();
}
else
{
  UART_Send_Byte(s[i]);
}
}


主程序:
char Create_name[4]={"atxt"};
UART_Send_Str("slave 5\r");
UART_Send_Str(Create_name);

第一句slave 5顺利输出,第二个字符串没显示,用串口助手十六进制显示为00,不知道怎么回事
请指教!!

我就想在函数外定义字符串,却不知道怎么碰到这个问题

相关帖子

沙发
ayb_ice| | 2011-1-12 14:46 | 只看该作者
char Create_name[4]={"atxt"};
长度不对,应该是5,最好不写,让编译器自己去处理...

使用特权

评论回复
板凳
bogekanpu|  楼主 | 2011-1-12 15:34 | 只看该作者
好像不是这个原因

使用特权

评论回复
地板
ayb_ice| | 2011-1-12 15:44 | 只看该作者
strlen函数靠什么确定一个字节串的长度

使用特权

评论回复
5
nevsayno| | 2011-1-12 15:45 | 只看该作者
char Create_name[]="atxt";

使用特权

评论回复
6
bogekanpu|  楼主 | 2011-1-12 15:46 | 只看该作者
库函数,string。h自带的

使用特权

评论回复
7
ayb_ice| | 2011-1-12 16:14 | 只看该作者
LZ
你知道字符串以什么结束吗?

使用特权

评论回复
8
bogekanpu|  楼主 | 2011-1-12 16:35 | 只看该作者
\0

使用特权

评论回复
9
nevsayno| | 2011-1-12 16:43 | 只看该作者
void UART_Send_Str(char *s)        //串口发字符串
{
int len;
int i;
len=strlen(s);

for(i=0;i<len;i++)
UART_Send_Byte(s[i]);
}


主程序:
char Create_name[]="atxt";
UART_Send_Str("slave 5\r");
UART_Send_Str(Create_name);

使用特权

评论回复
10
lkf123010| | 2011-1-12 23:12 | 只看该作者
char Create_name[]="atxt";

Create_name[]不是字符串,而是字符数组,后面没有结束符\n,

使用特权

评论回复
11
highgear| | 2011-1-12 23:32 | 只看该作者
strlen 通过判断 \0 结束来计算长度。两个问题:
1) 如同上面各位大霞所说, 使用 Create_name[]="atxt";
2) 善用 sizeof, 避免使用 strlen.

________________________________________________________________________
highgear发表于 2009-6-23 21:00 | 只看该作者 回复 引用 返回版面 TOP  得分:0
41楼:
顶山**!顶鹰!我用技术贴来结贴吧

1)这是讨论串口发送,一个通用的串口发送程序不应该有所限制,很多时候,0 也是通讯协议的一部分,即使发送的是字符串,例如同# $ * 0x0A, 0x0D 一样作为协议结束标志。

2)判断"\0"作为字符串的结尾,便利但危险。我前面已经说的很清楚了。如果是概念清楚的高手,这么做无可厚非,而菜鸟这么做则不妥。最简strcpy的讨论,现在看来,实际应用中的隐患极大,一般程序员不建议使用。很多著名的程序漏洞多是由判断"\0"引起,如使用极广的 ftp Server: ServerU. 原贴主enjoy21cn 的程序是另一个极好的例子。

3)sizeof 不用多说了。我说过,要强迫程序员关注数组长度,以避免不必要的溢出。要学会使用 sizeof, 即使你定义的是 char A[3]。在冷漠以前要求的程序中,我已经给冷漠指出过。冷漠原贴为 i < 15:

  for (i = 0; i < sizeof(table); i++)   //记住:永远不要直接使用数组长度!!!!!
  {
     P1 = ~table;

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

66

帖子

0

粉丝