学习C语言的第七天
因为一些身体的原因,连续几天的感冒和发烧,故多天只每天学习了一个小时不到,今天将这几天的学习整理在一起
一.字符串
1.1可以说就是字符数组
1.和整型一样---int data[] = {1,2,3,4};
2.和整型数组一个道理--char str[] = {'h','e','l','l','o'};
3.改进---char str[]="hello";
4.一般用char *p="hello";
3和4的区别 3是字符串变量
4是字符串常量--不允许被修改
注意指针的操作 保存地址可以--修改指向--指向字符串常量的地址空间
对野指针的内存空间操作不行
#include<stdio.h> int main() { int data[] ={1,2,3,4}; char cdata[] = {'h','e','l','l','o'}; char cdata2[] = "hello"; char *pchar = "hello"; cdata2[3] = 'm'; printf("%s",cdata2); putchar('\n'); puts(cdata2); return 0;; }
1.2和整型数组在存储上的区别
回忆如何计算数组的大小及数组元素的个数
字符串的存储方式--多了结束标志'\0'
#include<stdio.h> int main() { int data[] ={1,2,3,4}; char cdata[] = {'h','e','l','l','o'}; char cdata2[] = "hello"; int lenData = sizeof(data)/sizeof(data[0]); int lenCdata = sizeof(cdata)/sizeof(cdata[0]); int lenCdata2 = sizeof(cdata2)/sizeof(cdata2[0]); printf("data的长度为:%d\n",lenData); printf("cdata的长度为:%d\n",lenCdata); printf("cdata2的长度为:%d\n",lenCdata2); return 0; }
1.3sizeof和strlen的区别
#include<stdio.h> #include <string.h> int main() { char cdata[128] = "hello"; printf("sizeof:%d\n",sizeof(cdata)); printf("strlen:%d\n",strlen(cdata)); return 0; }
1.4动态开辟字符串
malloc 函数原型 void *malloc(size_t size) 分配所需的内存空间,并返回一个指向它的指针
realloc 函数原型 void *realloc(void *ptr,size_t size) 扩容
free 释放,防止内存泄漏
防止悬挂指针,
#include<stdio.h> #include <stdlib.h> #include<string.h> int main() { char *p; p = (char *)malloc(1); *p = 'c'; free(p); p = (char *)malloc(12); printf("扩容地址:%x\n",p); int len = strlen("zhangchaobo45452124544"); int newLen = len - 12 + 1; realloc(p,newLen); printf("扩容后的地址为:%x\n",p); strcpy(p,"zhangchaobo45452124544"); puts(p); puts("end"); return 0; }
1.5几种字符串常见api
输出字符串 puts
printf
获取字符串 gets char * gets(char * str)
因为本函数容易可以无限读取,易发生溢出
scanf
计算长度 sizeof
strlen
拷贝 strcpy
strncpy
1.6自己写拷贝函数
#include<stdio.h> char* myStrcpy(char *des,char *src) { if(des ==NULL || src == NULL){ return NULL; } cahr *bak = des; if(src != '0'){ *des = *src; des++; src++; } *des = '\0'; return bak; } int main() { char str[128] = {'\0'}; char *p = "zhangchaobo handsome"; myStrcpy(str,p); puts(str); return 0; }
1.7断言assert 用法:如果判断为假,抛出错误信息
1.8拼接 strcat
#include<stdio.h> #include <string.h> int main() { char str[128] = "zhangchaobo"; char *p = "handsome"; strcat(str,p); puts(str); return 0; }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10亿数据,如何做迁移?
· 推荐几款开源且免费的 .NET MAUI 组件库
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· c# 半导体/led行业 晶圆片WaferMap实现 map图实现入门篇
· 易语言 —— 开山篇