#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
/*
C语言没有字符串类型,
通过字符数组模拟C语言字符串,
以字符‘\0’或者数字0结尾
*/
int main01()
{
//数组不指定长度,没有0结束符,有多少元素数组就有多长
char buf[] = { 'a','b','c' };
printf("buf=%s\n", buf);//abc乱码
//指定长度数组,后面没有赋值的元素,自动补0.
char buf2[100] = { 'a','b','c' };
printf("buf2=%s\n", buf2);//abc
//所有元素赋值为0
char buf3[100] = { 0 };
//char buf4[2] = { 'a','b','c' };//数组越界
//一个面试题:
char buf5[50] = { '1','a','b','0','c' };
printf("buf5=%s\n", buf5);//1ab0c
char buf6[50] = { '1','a','b',0,'c' };
printf("buf6=%s\n", buf6);//1ab
char buf7[50] = { '1','a','b','\0','c' };
printf("buf7=%s\n", buf7);//1ab
//使用字符串初始化,常用
char buf8[] = { "abcdefghi" };
//strlen:测字符串长度,不包含数字0,字符'\0'
//sizeof:测数组长度,包含数字0,字符'\0'
printf("strlen(buf8)=%d,sizeof(buf8)=%d\n", strlen(buf8), sizeof(buf8));//9,10
char buf9[100] = { "abcdefghi" };
//strlen:测字符串长度,不包含数字0,字符'\0'
//sizeof:测数组长度,包含数字0,字符'\0'
printf("strlen(buf9)=%d,sizeof(buf8)=%d\n", strlen(buf9), sizeof(buf9));//9,100
printf("test");
//\012相当于转义字符\0
char str[] = "\0129";
printf("%s\n", str);
printf("\n");
return 0;
}
int main()
{
char buf[] = "abdcfifnsksodosk";
int i = 0;
int n = strlen(buf);
//数组方式操作字符串
for (i = 0; i < n; i++)
{
printf("%c", buf[i]);
}
printf("\n");
//指针法操作字符串
//数组名字,数组首元素地址
char* p = NULL;
p = buf;
for (i = 0; i < n; i++)
{
printf("%c", p[i]);
}
printf("\n");
for (i = 0; i < n; i++)
{
printf("%c", *(p+i));//操作所指向的内存
}
printf("\n");
for (i = 0; i < n; i++)
{
printf("%c", *(buf + i));//buf表示数组buf的内存首地址,所以buf+i改变了每次读取的buf数组中的位置
}
printf("\n");
//问题:buf和p完全等价吗?
//p++;//ok
//buf++;//error
//buf只是一个常量,不能修改
printf("\n");
return 0;
}
C语言 字符串的初始化和使用数组方式操作字符串和使用指针方式操作字符串
最新推荐文章于 2022-12-17 13:15:15 发布