写一个字符串拷贝函数,等待拷贝字符数组长度不能小于被拷贝字符串长度,否则将越界,程序崩溃。
//将字符串src复制到des中 a = b;
void Mystrcpy(char des[], char src[])
{
int i;
for (i = 0; src[i] != '\0'; i++)
{
des[i] = src[i];
}
des[i] = '\0';
}
//n:最多拷贝n个字符,不算'\0'
void Mystrcpy_s(char des[], int n, char src[])
{
int i;
for (i = 0; i < n && src[i] != '\0'; i++)
{
des[i] = src[i];
}
des[i] = '\0';
}
int main()
{
int arr[10] = {1,2,3,4,5};
int brr[10];
//brr = arr;//error,数组不能整体赋值,只有初始化时可以整体赋值
char str1[100] = "abcdefghijkl";
char str2[100] = "xyz";
char str3[100];
char str4[100];
char str5[4];
//将str1的内容复制到str3 "abcd"
//str3 = str1;//error,
//str1[0] = str2[0];//char = char;
Mystrcpy(str3,str1);
strcpy(str4,str1);
//将str1复制到str5中
//Mystrcpy(str5,str1);//崩溃,不安全的原因
//strcpy_s(str5, 4, str1);//安全版本的函数,建议函数,有的编译器没有这个函数
Mystrcpy_s(str5,4-1,str1);
printf("%s\n",str3);
printf("%s\n", str4);
printf("str5=%s\n", str5);
return 0;
}
使用库函数
int main()
{
char str1[] = "abcde";
char str2[10];
char str3[10];
//使用库函数将str1的内容拷贝到str2和str3
strcpy(str2,str1);
strcpy(str3,str1);
printf("%s,%s\n",str2,str3);
char str4[10];
//使用库函数将"hello"拷贝到str4
strcpy(str4,"hello");
printf("%s\n",str4);
char str5[10];
//使用库函数将"hello world"拷贝到str5
strcpy(str5, "hello world");//越界,12个字符串在10个数组格里存不下
printf("str5=%s\n", str5);
return 0;
}
求字符数组长度和字符串长度
int main()
{
char str1[100] = "abcde";
char str2[] = "abcde";
char str3[] = "abcd\0e";
char str4[] = "abcd\0e\n";
printf("%d,%d\n",sizeof(str1),strlen(str1));//100,5
printf("%d,%d\n", sizeof(str2), strlen(str2));//6,5
printf("%d,%d\n", sizeof(str3), strlen(str3));//7,4
printf("%d,%d\n", sizeof(str4), strlen(str4));//8,4
return 0;
}
区分字符数组与字符串
字符数组 ,char arr[10]; 利用char定义的数组。
字符串:用 ""包括的字符序列,字符串的末尾有一个隐含的’\0’
字符数组是否为字符串,就看字符数组是否有’\0’ ,有’\0’就是字符串,否则不是。
char str1[10] = { 'a','b','c','d','e','f','g','h','i','j' };//字符数组,不是字符串
char str2[10] = { 'a','b','c','d','e','f','g','h'};//字符数组,是字符串
char str3[] = { 'a','b','c','d','e','f','g','h' };//字符数组,不是字符串
char str4[10] = "abcde";//字符数组,是字符串
char str5[] = "abcde";//字符数组,是字符串
const char* str6 = "abcde";//不是字符数组,是字符串
char str7[] = { 'a','b','c','d','\0','e' };//是字符数组,是字符串
printf("%s\n",str1);
str2[1] = 0;
printf("%s\n",str2);//考题