1.字符串的拷贝API:strcpy()
不能给数组名赋值字符串的情况,要用strcpy,具体的请看下面
因为数组名是常量,不能直接赋值字符串
字符串常量:
1.与字符数组的关系: 在C语言中没有专门的字符串变量,如果想将一个字符串存放在变量中以便保存,必须使用字符数组,即用一个字符型数组来存放一个字符串,数组中每一个元素存放一个字符。例如“char a[10]=“love”.”
.
2.与指针的关系: 在程序中,字符串常量会生成一个“指向字符的常量指针”。当一个字符串常量出现于一个表达式中时,表达式所使用的值就是这些字符所存储的地址,而不是这些字符本身。因此,你可以把字符串常量赋值给一个“指向字符的指针”,例如:char *a = “123” ; a = “abc”;,*后者指向这些字符所存储的地址。
.
但是,你不能把字符串常量赋值给一个字符数组,因为字符串常量的直接值是一个指针,而不是这些字符本身。例如:char a[5];a[0] = “a”;就是错误的,报错结果:invalid conversion from 'const char’ to ‘char’。
.
例如:char a[10]=“love”,的意思就是用字符串“love”来初始化字符数组a的内存空间,而数组的首地址也就是“love”字符串的地址。
char strDest[128]= {'\0'};
strDest = "hello world"; 错误的,不能将字符串赋值数组。要用strcpy
printf("%s\n",strDest);
char strDest[128];
strDest = "hello world"; 错误的,不能将字符串赋值数组。要用strcpy
printf("%s\n",strDest);
正确给数组赋值字符串:
原型:char *strcpy(char* dest,const char *src)
- 第一个参数dest:目标
- 第二个参数src:源
char strDest[128] = {'\0'}; 第一种定义初始化数组,平常数组
char *strSrc = "hello world";
strcpy(strDest,strSrc);
printf("复制字符串完毕:%s\n",strDest);
===============================================================================
char *strDest; 第二种定义初始化数组,用malloc(以下的都是以这个来讲)
strDest = (char *)malloc(128);
memset(strDest,'\0',128); 此时的128换成sizeof(strDest)/sizeof(strDest[0] = 4不可以,
因为此时strDest是野指针,指针在windows中占4个字节
char *strSrc = "hello world"; 不能将字符串赋值数组。要用strcpy。错误情况:strSrc = "hello world";
strcpy(strDest,strSrc);
printf("复制字符串完毕:%s\n",strDest);
===============================================================================
memset(strDest,'\0',sizeof(strDest)/sizeof(strDest[0])); 初始化,重置数组(注意细节)。
strcpy(strDest,"再一次调用strcpy :hello world");
puts(strDest);
2.字符串的拷贝API:strncpy()
原型:char *strncpy(char *destinin, char *source, int maxlen);
- 第一个参数dest:目标
- 第二个参数src:源
- 第三个参数src:最大长度,就是要拷贝几个
memset(strDest,'\0',128); 初始化,重置数组。这里用sizeof(strDest)/sizeof(strDest[0])结果会出错(细节)
strncpy(strDest,"TheLuk",3);
puts(strDest);
- 输出的结果是:The