3.4 C提高 2 3

1.C提高 字符串拷贝的几种方法

点击查看代码
	for (i = 0; src[i] != '\0'; i++)
	{
		dst[i] = src[i];
	}

for (i = 0; *(src+i) != '\0'; i++)
	{
		*(dst+i) = *(src+i); //dst[i] = src[i]
	}
	//补结束符
	//dst[i] = 0;
	*(dst + i) = 0;


while (*src != 0)
	{
		*dst = *src;
		dst++;
		src++;
	}
	*dst = 0;

2.字符串的查找
strstr函数
strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回 str1字符串从 str2第一次出现的位置开始到 str1结尾的字符串;

点击查看代码

	char *p = "11abcd111122abcd333abcd3322abcd3333322qqq";
	int n = 0;

	do 
	{
		p = strstr(p, "abcd");
		if (p != NULL)
		{
			n++; //累计个数

			//重新设置查找的起点
			p = p + strlen("abcd");

		}
		else //如果没有匹配的字符串,跳出循环
		{
			break;
		}


	} while (*p != 0); //如果没有到结尾
3.两头堵模型
点击查看代码
int main01(void)
{
	char *p = "      abcdefg      ";
	int begin = 0;
	int end = strlen(p) - 1;
	int n = 0;

	//从左边开始
	//如果当前字符为空,而且没有结束
	while ( p[begin] == ' ' && p[begin] != 0)
	{
		begin++; //位置从右移动一位
	}

	//如果当前字符为空,而且没有结束
	while ( p[end] == ' ' && p[end] != 0)
	{
		end--; //往左移动
	}

	n = end - begin + 1;
	printf("n = %d\n", n);

	printf("\n");
	system("pause");
	return 0;
}
4.const的应用与含义 1.const的引用 extern const int aa; //不能再赋值,只能声明
点击查看代码
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct MyStruct
{
	int a;
	int b;
}MyStruct;

void fun(MyStruct *p)
{
	//指针能变
	//p = NULL;
	//指针指向的内存也可以变
	//p->a = 10; //ok
}

void fun1(MyStruct const *p)
{
	//p = NULL; //ok
	//p->a = 10; //err
}

void fun2(MyStruct  * const p)
{
	//p = NULL; //err
	p->a = 10;//ok
}

//p只读
void fun3(MyStruct const * const p)
{
	MyStruct tmp;
	tmp.a = p->a;
}

int main(void)
{
	//const修饰一个变量为只读
	const int a = 10;
	//a = 100; //err

	//指针变量, 指针指向的内存, 2个不同概念
	char buf[] = "aklgjdlsgjlkds";

	//从左往右看,跳过类型,看修饰哪个字符
	//如果是*, 说明指针指向的内存不能改变
	//如果是指针变量,说明指针的指向不能改变,指针的值不能修改
	const char *p = buf;
	// 等价于上面 char const *p1 = buf;
	//p[1] = '2'; //err
	p = "agdlsjaglkdsajgl"; //ok

	char * const p2 = buf;
	p2[1] = '3';
	//p2 = "salkjgldsjaglk"; //err

	//p3为只读,指向不能变,指向的内存也不能变
	const char * const p3 = buf;

	//如何引用另外.c中const变量,了解
	extern const int aa; //不能再赋值,只能声明
	printf("aa = %d\n", aa);

	//const修饰的变量,定义时初始化

	//在c语言中, const是一个冒牌货
	const int b = 10;
	//b = 100; //err
	int *q = &b;
	*q = 22;
	printf("%d, %d\n", b, *q);


	printf("\n");
	system("pause");
	return 0;
}
只读是编译器设置的属性 类由结构体而来 对此我想到了类中私有属性 感觉很像 应该也是进化而来
posted @ 2023-03-04 11:11  逆向狗  阅读(17)  评论(0)    收藏  举报