#include <stdio.h>
#include <string.h>
int main()
{
c语言会自动在双引号""括起来的内容的末尾补上"\0"代表结束,ASCII中的0号位也占用一个字符。
此种方法声明的字符串本质上是字符数组, char a[9]="20201201";
定义[9],实际只使用8个空间存储字符,最后一个留着存放字符串结束符号‘\0’
最大下标为8,就是第9个元素,但它是结束符,所以还少一位,实际下标为7
sizeof() 实际上是获取了数据在内存中所占用的存储空间,以字节为单位来计数,如果在定义数组时给了长度,则就是定义时的长度,系统分配长度
strlen() 函数从字符串的开头位置依次向后计数,直到遇见\0,然后返回计时器的值。最终统计的字符串长度不包括\0 ,实际实用长度
//char ccArr[] = {'I','L','O','V','E','C'}; // 6 7 结果不是预料之中
// 正常合法使用情况1
char ccArr[] = {'I','L','O','V','E','C','\0'}; // 7 6 末尾自动加结束符
char sssArr[] = "ILOVEC"; // 7 6 末尾自动加结束符
printf("ccArr的size=%d\n", sizeof(ccArr)); // 内存分配大小
printf("ccArr的len=%d\n", strlen(ccArr)); // 实际占用大小
printf("sssArr的size=%d\n", sizeof(sssArr));
printf("sssArr的len=%d\n", strlen(sssArr));
if(ccArr[7]== '\0' && sssArr[7]== '\0' )
{
printf("ccArr与sssArr末尾自动添加结束符\n");
}
// 正常合法使用情况2
char path[10];
printf("path="); // 输入 hello ,末尾自动添加'\0'
fflush(stdin);
scanf("%s", path);
printf("size=%d\n", sizeof(path)); // 10 内存占用字节数,如果在定义数组时给了长度,则就是定义时的长度,系统分配长度
printf("len=%d\n", strlen(path)); // 5 最终统计的字符串长度不包括\0 ,实际实用长度
if(*(path+5) == '\0' ) // true
{
printf("末尾自动添加结束符\n\n");
}
char* a=path;
printf("%s",a); // 正常
return 0;
}
#c语言 #字符串数组 #字符串指针 #末尾自动添加结束符 #sizeof() #strlen()
于 2022-12-20 23:43:48 首次发布