char数组存字符串 && unsigned char数组存字符串 && 数组当形参 && ASCII控制字符不被输出

       关于char数组存储字符串的问题,一开始是如下使用的:

int main(int argc, char* argv[])
{
       char value[512];
       value = "sts";
       printf("output is %s \r\n",value);
       return 0;
}

出现编译错误:error C2440: '=' : cannot convert from 'char [4]' to 'char [512]'。问题出在:两个地址的所代表的空间长度是不同的,所以不能直接赋值,如果char *value,只要分配了MEM,则是可以的。

        正确的做法是:

int main(int argc, char* argv[])
{
       char value[512];
       memcpy(value,"sts",strlen("sts")+1);
       printf("output is %s \r\n",value);
       return 0;
}

======================================unsigned char数组存字符串==========================================================

        一直以为只有char数组能存字符串,其实unsigned char数组也可以,看如下的示例:

#include "stdafx.h"
#include "string.h"

typedef	unsigned int	uint32,u32;
typedef	unsigned char	uint8,u8;
typedef	unsigned short	uint16,u16;

uint8 RenameTmp[15]={0},Numelen=0;
uint8 pBuffer[]="AT+RENAME[SSS]";
int main(int argc, char* argv[])	//程序目标是取出AT命令中重命名的名字并输出打印
{
	uint8 *pointer;
	pointer = pBuffer+10;
	while(*pointer != ']')
	{	
		pointer++;
		Numelen++;
	}
	pBuffer[10+Numelen]='\0';		//字符串结束符
	memcpy(RenameTmp,pBuffer+10,Numelen);		//此处不能用strncpy,编译提示不能将unsigned char地址转成char地址
	printf("RenameTmp is %s \r\n",RenameTmp);
	return 0;
}

      执行输出


===========================================数组当形参============================================================

         写个例子去理解一下吧:
#include <stdio.h>
void test( int aiNum[] , int len )  //形参  ,也可以这样:void test( int *aiNum , int len )
{
    int i;
    for( i=0;i<len;i++)
       printf( "num[%d]=%d\n" , aiNum[i] );
}
int main( void )
{
     int aiN[5]={1,2,3,4,5};
     test( aiN, 5 );    //实参:数组名,目的是将数组的首地址传给test函数
     return 0;
}

==========================ASCII控制字符不被输出=========================

看如下的示例:

main()
{
char s[]={0x43,0x4F,0x4D,0x4D,0x4F,0x4E,0x2D,0x48,0x42,0x53,0x11,0x06,0x02,0x01};
int length = strlen(s);
printf("length is %d \r\n",length);
  printf("data is %s \r\n",s);
}

输出


结论:该数组的内容有14个字符,但是按char输出时,只输出了10个。为何后面的字符不显示?ASCII码的0x30前的都是控制字符,是无法输出的。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值