#include "stdafx.h"
void cmdsend(unsigned int * info);
int main()
{
unsigned int senddata[5];
senddata[0] = 8;
senddata[1] = 2;
senddata[2] = 0;
senddata[3] = 4;
senddata[4] = 5;
cmdsend( senddata );
while(1){;}
}
void cmdsend(unsigned int * info)
{
unsigned int k;
for (k = 0; ((*info) != '\0') && (info != NULL); *info++, k++)
printf("senddata is %d\r\n", *info);
}
如上面程序所示,我想将数组sendata完整的输出,现在只能打印出8,2.即在sendata[2]处结束,好像判断为 info == NULL了,请问应该怎样修改,才能输出完整数组?在使用 *info 指针作为形参的前提下。
上面的已经分析了原因,中间断断条件有问题,指针越界以后可能不会为null,这时你的判断条件不会终止,所以继续向下执行,导致不确定的后果,最好采用如下形式比较安全:
void cmdsend(unsigned int * info, int len)
{
unsigned int k;
for (k = 0; k < len, k++)
printf("senddata is %d\r\n", *(info+k));
}
其中len代表数据的长度
因为'\0'的ASCII码就是 0 !!!!!!
相互比较的时候会把'\0'转化为ASCII码,也就是0,所以停在第二个了……
senddata[2] 的值为0所以根据你的(*info) != '\0'的判断就会输出到senddata[2]就停止,如果想遇‘\0’则结尾的话,可以把senddata数组声明成char型。