New Code day17

3.模拟实现strcpy

define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
#include <assert.h>

void my_strcpy(char *dst,const char *src)
{
	assert(dst);
	assert(src);
	while(*dst++ == *src++ && *src != '\0')
	{
		;
	}
}
int main()
{
	char src[] = "def";
	char dst[] = "abc";
	my_strcpy(dst,src);
	printf("%s",dst);
	return 0;
}

4.模拟实现strcat

define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
#include <assert.h>

void my_strcat(char *dst,const char *src)
{
	char *tmp = dst;
	assert(dst);
	assert(src);
	while(*tmp != '\0'){tmp++;}
	while(*src != '\0')
	{
		*tmp++ = *src++ ;
	}
	*tmp = '\0';
}

int main()
{
	char src[] = "efg";
	char dst[20] = "abcd";
	my_strcat(dst,src);
	printf("%s\n",dst);
	return 0;
}

3.实现strstr

#define _CRT_SECURE_NO_WARNINGS 1

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

//3.实现strstr 
char* my_strstr(const char *str1,const char *str2)
{
	char *cur =(char *)str1	;
	char *s1,*s2;
	assert(str1 != NULL && str2 != NULL);
	while(*cur)
	{
		s1 = cur;
		s2 = (char *)str2;
		while(*s1 && !(*s2 - *s1))
		{
			s1++;
			s2++;
		}
		if(!*s2)
			return cur;
		cur++;
	}
	return NULL;
}

int main()
{
	char src[] = "abcdaeaf";
	char *dst = "cde";
	if(my_strstr(src,dst))
		printf("true!\n");
	else
		printf("flase!\n");
	return 0;
}

4.实现strchr

char* my_strchr(char* str, char a)
{
	assert(str);
	while(*str != '\0' && *str != a)
	{
		str++;
	}
	return *str==a?str:NULL;
}
int main()
{
	char arr[] = "abcdef";
	char a = 'd';
	printf("%s",strchr(arr,a));
	return 0;
}

5.实现strcmp

int my_strcmp(char const  *p,char const  *q)
{
	assert(p != NULL && q != NULL);
	while(*p == *q)
	{
		if(*p == '\0')
			return 0;
		p++;
		q++;
	}
	if(*p>*q)
		return 1;
	else
		return -1;
}
int main()
{
	char *p = "abcdef";
	char *q = "abcdf";
	int ret = my_strcmp(p,q);
	if(ret > 0)
		printf("前者大于后者!\n");
	else if(ret < 0)
		printf("前者小于后者!\n");
	else
		printf("两者一样!\n");
	return 0;
}

6.实现memcpy 与memmove相似

#define _CRT_SECURE_NO_WARNINGS 1

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


void my_memcpy(char *dst,char *src,int count)
{
	char *p = dst;
	char *q = src;
	assert(dst);
	assert(src);

	while(count-- && *q != '\0')
	{
		*p++ = *q++;
	}
	while(*p++)
	{
		;
	}
		*p = '\0';
}

int main()
{
	char *src = "dsd";
	char dst[100] = "abcd";
	my_memcpy(dst,src,3);
	printf("%s\n",dst);
	return 0;
}

7.实现memmove为前者的优化

    #define _CRT_SECURE_NO_WARNINGS 1
    
    #include <stdio.h>
    #include <assert.h>
    #include <string.h>
    
  void my_memmove(void *dst, void *src, size_t tLen)
{
	char *pDst = (char*)dst;
	char *pSrc = (char*)src;
	assert(pDst != NULL && pSrc != NULL);
    if((pDst>pSrc) && (pDst<(pSrc+tLen)))
    {
        // 特殊处理
        char* p = pSrc + tLen - 1;
        char* q = pDst + tLen - 1;
        while(p >= pSrc)
        {
            *q-- = *p--;
        }
    }
    else
    {
        // 不需要特殊处理可直接用memcpy
        memcpy(pDst, pSrc, tLen);
    }
}
    int main()
    {
    	char *src = "dsd";
    	char dst[100] = "abcdefgh";
    	my_memmove(dst+3,dst+2,4);
    	printf("%s\n",dst);
    	return 0;
    }
在学习或开发“苍穹外卖”项目时,用户可能会遇到 **Day6 代码为空** 的问题。这通常意味着在指定的模块、包路径或文件中没有找到预期的代码内容,可能是由于代码未正确加载、下载不完整、配置错误或资源遗漏导致的。 ### 常见原因及解决方法 1. **检查项目结构和依赖配置** - 确保项目的 `pom.xml` 文件中已正确引入 Spring Boot 和 Knife4j(Swagger)等必要的依赖。 - 若 Day6 涉及接口文档生成,需确认是否已添加如下依赖: ```xml <!-- Swagger2 --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version> </dependency> <!-- Knife4j UI --> <dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-spring-boot-starter</artifactId> <version>3.0.3</version> </dependency> ``` 2. **验证包扫描路径** - 如果使用了 Swagger 或 Knife4j 生成接口文档,则需确保配置类中的 `RequestHandlerSelectors.basePackage("com.sky.controller")` 正确指向控制器所在的包路径[^1]。 - 若该路径不正确,可能导致接口文档无法识别对应的 API 接口,从而显示为空。 3. **检查控制器(Controller)类是否存在** - 在 Day6 中可能涉及多个控制器类,如 `CategoryController`、`DishController` 等,用于处理分类、菜品等业务逻辑。 - 需确认这些类是否存在于 `com.sky.controller` 包下,并且每个方法都带有正确的注解,例如 `@GetMapping`、`@PostMapping` 等。 4. **查看服务层与数据访问层实现** - 查看对应的服务接口(如 `CategoryService`)是否有实现类(如 `CategoryServiceImpl`),并确保其包含具体的业务逻辑代码[^4]。 - 数据访问层(如 `CategoryMapper`)应通过 MyBatis 注解或 XML 映射文件完成数据库操作。 5. **线程本地变量(TL)的配置** - 若 Day6 涉及用户登录状态或拦截器功能,则需检查是否配置了 `ThreadLocal` 用于存储用户信息,如用户 ID[^3]。 - 示例代码如下: ```java public class BaseContext { private static ThreadLocal<Long> threadLocal = new ThreadLocal<>(); public static void setCurrentId(Long id) { threadLocal.set(id); } public static Long getCurrentId() { return threadLocal.get(); } public static void removeCurrentId() { threadLocal.remove(); } } ``` - 同时,确保拦截器类中调用了上述方法将用户 ID 存入线程上下文中。 6. **重新下载或导入项目** - 如果上述步骤均无误,但仍然找不到 Day6 的代码内容,建议重新从官方仓库下载整个项目源码。 - 使用 Git 命令克隆仓库后,切换至对应分支或标签版本(如 `day6` 分支)以获取完整的代码结构。 7. **IDE 缓存清理与重新构建** - 清理 IDE 缓存(如 IntelliJ IDEA 中点击 "File → Invalidate Caches / Restart")。 - 执行 Maven 清理命令: ```bash mvn clean install ``` - 再次启动项目,查看是否能正常加载 Day6 的相关代码。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

quchen528

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值