记录嵌入式学习

学习目标:C语言之字符串学习

  • 十天学会C语言

学习内容:

  1. C语言字符串引入和注意事项

学习时间:

2022.10.17


学习产出:

1.命令行进入D盘,首先是d:.直接进入系统盘,再cd Filename

2.输入一个字符串,可以用数组char 或者 指针 *p ,数组名就是数组的首地址,也是指针。

3.输出一个字符串,可以定义指针,用指针偏移输出,

int data[] = {1,2,3,4,5};
	int i;
	char data1[] = "hello";
	char *pdata = "hello";
	
	
	for(i=0;i<5;i++){
		printf("%c",*(pdata+i));
	}

4.直接使用%s输出,puts就是输出一整串字符。

int main()
{
	int data[] = {1,2,3,4,5};
	int i;
	char data1[] = "hello";
	char *pdata = "hello";
	printf("%s",data1);
	putchar('\n');
	puts(pdata);
	return 0;
}

注意 数组是字符串变量,可以更改,指针是字符串常量,内容不可更改。

#include<stdio.h>

int main()
{
	int data[] = {1,2,3,4,5};
	int i;
	char data1[] = "hello";
	char *pdata = "hello";
	
	data1[2] = 'm';
	printf("%s",data1);
	putchar('\n');
	puts(pdata);
	*pdata = 'm';
	puts("end");
	return 0;
} 

 注意指针操作,(野指针指的是不知道指向指针的哪个位置,比如char *p,并没有明确的内存指向,很危险,影响内存)

 

 

5.计算数组里面的元素个数或者计算长度

int main()
{
	int data[] = {1,2,3,4,5};
	int len;
	char data1[] = "hello";
	char *pdata = "hello";
	len = sizeof(data)/sizeof(data[0]);
	printf("%d",len);
	return 0;
	
}

 6.注意字符串和字符数组的区别

data1[6] = ('h','e','l','l','0','\0') == data2[] = "hello"
#注意字符串的结束标志

7.sizeof 和strlen 的区别

#include<stdio.h>
#include<string.h>

int main()
{
	int data[] = {1,2,3,4,5};
	int len;
	char data1[] = "hello";
	len = sizeof(data)/sizeof(data[0]);
	printf("size:%d\n",sizeof(data1));
	printf("strlen:%d\n",strlen(data1));
	
	char *p = "hello";
	//p是一个char *,sizeof 来计算的时候,得出的是计算机用多少字节来表示一个地址
	printf("size:%d\n",sizeof(p));
	printf("size:%d\n",sizeof(char));
	printf("size:%d\n",sizeof(char *));
	printf("strlen:%d\n",strlen(p));
	
	return 0;
	
}

8. 指针函数返回的是一个指针,函数指针是函数的地址

函数指针
void test()
{


}

void (*p)();
p = test;


9.对于野指针修正,开辟动态的内存

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(){
	char *p;//野指针
	p = (char *)malloc(1);//p有了具体的内存指向,不属于野指针
	
	*p = 'c';
	free(p);
	p = NULL;
	p = (char *)malloc(12);//分配内存为12
	memset(p,'\0',12);
	printf("扩容后的地址:%x",p);
	int len = strlen("panzhanjie13135143513");
	int newlen = len - 12 +1;
	realloc(p,newlen);//12字节不够用,给他扩容
	printf("扩容后的地址:%x",p);
	strcpy(p,"张三13135143513");
	puts(p);
	puts("end");
	return 0;
}

10.字符常用操作函数

#include <string.h>
#include <stdio.h>
//puts自带换行

int main()
{
	char *p = "张三";
	char str[128] = {'\0'};
	
	puts(p);
	printf("%s\n",p);
	
	puts("请输入字符串:");
	//scanf("%s",str);
	//gets(str);
	//strcpy(str,p);
	strncpy(str,p,6);
	puts(str);
	
	
	
	return 0;
}
#include <stdio.h>
#include <string.h>
#include <assert.h>
char *mystrcat(char *des,char *src)
{
	assert( des!=NULL && src != NULL);//断言
	char *bak = des;
	while(*des != '\0')
		des++;
	while((*des++ = *src++) != '\0')
		*des = '\0';
	return bak;
}

int main()
{
	char str[128] = "张三";
	char *p2 = NULL;
	char *p = "shuai";
	p2 = mystrcat(str,p);
	puts(str);
	puts(p2);
	
	return 0;
	
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值