2 simplelife123 Simplelife123 于 2013.07.17 23:31 提问

如何在C语言中以数组指针作为形参输出数组

#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 指针作为形参的前提下。

4个回答

DoctorCZM
DoctorCZM   2013.12.19 20:16
已采纳

上面的已经分析了原因,中间断断条件有问题,指针越界以后可能不会为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代表数据的长度

Simplelife123
Simplelife123   2013.07.18 00:38

因为'\0'的ASCII码就是 0 !!!!!!

landengluo
landengluo   2013.07.18 02:07

相互比较的时候会把'\0'转化为ASCII码,也就是0,所以停在第二个了……

a1193561652
a1193561652   Rxr 2015.05.19 16:38

senddata[2] 的值为0所以根据你的(*info) != '\0'的判断就会输出到senddata[2]就停止,如果想遇‘\0’则结尾的话,可以把senddata数组声明成char型。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!