字符串崩溃原因



//字符串崩溃原因:
//①试图修改字符串常量的值   ②越界
//[四个字节【存放的只是abcde的地址】] char *str1 = "abcde";   //称为 字符串常量 (不能修改字符串常量的值)
//[六个字节,包括‘\0’【存放的都是自己定义的,可以修改】] char str2[] = "abcde";   //称为 字符数组 (有\0 所以也是字符串)

/*
#include <stdio.h>
int  main()
{
 char *str1 = "abcde";
 char str2[] = "abcde";
 //str1[0] = 'x';   //error,因为写错误,即不能修改字符串常量的值 ①
 str2[0] = 'x';

 //strcpy(str1,"xyz");   //error,因为写错误,即不能修改字符串常量的值 ②
 //strcpy(str2,"hello world");   //error,因为越界

 printf("%s\n",str1);
 printf("%s\n",str2);
 return 0;
}
*/


/*
int main()
{
 char str1[10];
 gets(str1);   //危险,越界,建议使用fgets
 printf("str1 = %s\n",str1);
 return 0;
}
*/


//例:
#include <stdio.h>
#include <string.h>
int main()
{
 char str1[100] = "abcde";   //100,5
 char str2[] = "abcde";   //6,5
 char str3[100] = "abcdef\0ijk\n";   //100,6   //结果中的6   是因为strlen计算时到\0停止
 char str4[] = "abcdef\0ijk\n";   //12,6
 char *str5 = "abcde";   //4,5                 //结果中的4   是因为* 四个字节【存放的只是地址】
 char *str6 = "abcdef\0ijk\n";   //4,6         //结果中的4   是因为* 四个字节【存放的只是地址】
 printf("%d,%d\n",sizeof(str1),strlen(str1));
 printf("%d,%d\n",sizeof(str2),strlen(str2));
 printf("%d,%d\n",sizeof(str3),strlen(str3));
 printf("%d,%d\n",sizeof(str4),strlen(str4));
 printf("%d,%d\n",sizeof(str5),strlen(str5));
 printf("%d,%d\n",sizeof(str6),strlen(str6));
 return 0;
}

猜你喜欢

转载自blog.csdn.net/bian1cheng1/article/details/79922246