关于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前的都是控制字符,是无法输出的。