使用C语言实现strcpy字符串拷贝函数strcpy函数用于将源字符串复制到目标字符串,包括结束符'\0'。// 实现字符串拷贝函数 char* my_strcpy(char* dest, const char* src) { // 参数检查 if (dest == NULL || src == NULL) { return NULL; } char* original_dest = dest; // 保存目标字符串的起始位置 // 逐字节复制,直到遇到源字符串的结束符'\0' while (*src != '\0') { *dest = *src; dest++; src++; } // 添加字符串结束符 *dest = '\0'; return original_dest; // 返回目标字符串的起始地址 } // 使用示例 void test_my_strcpy() { char src[] = "Hello World"; char dest[20]; my_strcpy(dest, src); printf("复制后的字符串: %s\n", dest); } 优化 char* my_strcpy_optimized(char* dest, const char* src) { char* original_dest = dest; while ((*dest++ = *src++) != '\0'); return original_dest; }请用C语言编写一个函数 swap_endian,它能将一个32位无符号整数的字节序(大端或小端)进行反转。例如,输入 0x12345678 应返回 0x78563412。#include <stdint.h> uint32_t swap_endian(uint32_t value) { return ((value & 0xFF000000) >> 24) | ((value & 0x00FF0000) >> 8) | ((value & 0x0000FF00) << 8) | ((value & 0x000000FF) << 24); }实现一个函数,将一个整型数组按升序排列。不允许使用标准库中的排序函数(如 qsort)。可以使用如冒泡排序、插入排序、选择排序等简单排序算法。#include<stdio.h> int main() { int arr[8]; for(int i=0;i<8;i++){ scanf("%d",&arr[i]); } int temp; for(int i=0;i<7;i++){ for(int j=1;j<8-i;j++){ if(arr[j-1]>arr[j]){ temp=arr[j-1]; arr[j-1]=arr[j]; arr[j]=temp; } } } for(int i=0;i<8;i++){ printf("%d",arr[i]); } }实现一个函数,接收一个以 null 结尾的字符串,并将该字符串逆序(原地逆序,不创建新的字符串)#include <string.h> void reverse_string(char *str) { if (str == NULL) return; int len = strlen(str); int left = 0; int right = len - 1; while (left < right) { char temp = str[left]; str[left] = str[right]; str[right] = temp; left++; right--; } }请用 C 语言编写一个函数,用于检测当前运行的系统是大端序还是小端序。int check_endianness() { unsigned int test_value = 0x12345678; unsigned char *byte_ptr = (unsigned char *)&test_value; // 小端序:低地址存放低位字节(0x78) if (byte_ptr[0] == 0x78) { return 1; // 小端序 Little-Endian } // 大端序:低地址存放高位字节(0x12) else if (byte_ptr[0] == 0x12) { return 0; // 大端序 Big-Endian } return -1; // 异常 }请用 C 语言编写一个函数,接收一个整型数组和数组大小,实现查找数组中的最大值并返回。#include <limits.h> int find_max(int arr[], int n) { if (arr == NULL || n <= 0) return INT_MIN; // 处理无效输入 int max_val = arr[0]; for (int i = 1; i < n; i++) { if (arr[i] > max_val) max_val = arr[i]; } return max_val; }字符串去重:给定一个字符串,去除所有之前出现过的字符,只保留第一次出现的字符。示例输入:hello,welcome to xiaomi,示例输出:helo,wcmt xiaivoid kill_same(char *o, char *n) { int i = 0, k = 0; while (o[i] != '\0') { int exists = 0; for (int j = 0; j < k; j++) { if (o[i] == n[j]) exists = 1; } if (!exists) n[k++] = o[i]; i++; } n[k] = '\0'; }基于数组实现一个环形缓冲区,要求在不使用额外变量(如 count 或 full_flag)的情况下,仅依靠 head 和 tail 两个索引来区分缓冲区是空还是满。请说明你的设计思路并实现关键的入队和出队函数。#define BUFFER_SIZE 16 typedef struct { int buffer[BUFFER_SIZE]; size_t head; size_t tail; } circular_buffer_t; void circular_buffer_init(circular_buffer_t *cb) { if (cb == NULL) return; cb->head = 0; cb->tail = 0; } static bool is_empty(circular_buffer_t *cb) { return cb->head == cb->tail; } static bool is_full(circular_buffer_t *cb) { return (cb->tail + 1) % BUFFER_SIZE == cb->head; } int circular_buffer_enqueue(circular_buffer_t *cb, int data) { if (cb == NULL || is_full(cb)) { return -1; } cb->buffer[cb->tail] = data; cb->tail = (cb->tail + 1) % BUFFER_SIZE; return 0; } int circular_buffer_dequeue(circular_buffer_t *cb, int *data) { if (cb == NULL || is_empty(cb) || data == NULL) { return -1; } *data = cb->buffer[cb->head]; cb->head = (cb->head + 1) % BUFFER_SIZE; return 0; }
使用C语言实现strcpy字符串拷贝函数strcpy函数用于将源字符串复制到目标字符串,包括结束符'\0'。// 实现字符串拷贝函数 char* my_strcpy(char* dest, const char* src) { // 参数检查 if (dest == NULL || src == NULL) { return NULL; } char* original_dest = dest; // 保存目标字符串的起始位置 // 逐字节复制,直到遇到源字符串的结束符'\0' while (*src != '\0') { *dest = *src; dest++; src++; } // 添加字符串结束符 *dest = '\0'; return original_dest; // 返回目标字符串的起始地址 } // 使用示例 void test_my_strcpy() { char src[] = "Hello World"; char dest[20]; my_strcpy(dest, src); printf("复制后的字符串: %s\n", dest); } 优化 char* my_strcpy_optimized(char* dest, const char* src) { char* original_dest = dest; while ((*dest++ = *src++) != '\0'); return original_dest; }请用C语言编写一个函数 swap_endian,它能将一个32位无符号整数的字节序(大端或小端)进行反转。例如,输入 0x12345678 应返回 0x78563412。#include <stdint.h> uint32_t swap_endian(uint32_t value) { return ((value & 0xFF000000) >> 24) | ((value & 0x00FF0000) >> 8) | ((value & 0x0000FF00) << 8) | ((value & 0x000000FF) << 24); }实现一个函数,将一个整型数组按升序排列。不允许使用标准库中的排序函数(如 qsort)。可以使用如冒泡排序、插入排序、选择排序等简单排序算法。#include<stdio.h> int main() { int arr[8]; for(int i=0;i<8;i++){ scanf("%d",&arr[i]); } int temp; for(int i=0;i<7;i++){ for(int j=1;j<8-i;j++){ if(arr[j-1]>arr[j]){ temp=arr[j-1]; arr[j-1]=arr[j]; arr[j]=temp; } } } for(int i=0;i<8;i++){ printf("%d",arr[i]); } }实现一个函数,接收一个以 null 结尾的字符串,并将该字符串逆序(原地逆序,不创建新的字符串)#include <string.h> void reverse_string(char *str) { if (str == NULL) return; int len = strlen(str); int left = 0; int right = len - 1; while (left < right) { char temp = str[left]; str[left] = str[right]; str[right] = temp; left++; right--; } }请用 C 语言编写一个函数,用于检测当前运行的系统是大端序还是小端序。int check_endianness() { unsigned int test_value = 0x12345678; unsigned char *byte_ptr = (unsigned char *)&test_value; // 小端序:低地址存放低位字节(0x78) if (byte_ptr[0] == 0x78) { return 1; // 小端序 Little-Endian } // 大端序:低地址存放高位字节(0x12) else if (byte_ptr[0] == 0x12) { return 0; // 大端序 Big-Endian } return -1; // 异常 }请用 C 语言编写一个函数,接收一个整型数组和数组大小,实现查找数组中的最大值并返回。#include <limits.h> int find_max(int arr[], int n) { if (arr == NULL || n <= 0) return INT_MIN; // 处理无效输入 int max_val = arr[0]; for (int i = 1; i < n; i++) { if (arr[i] > max_val) max_val = arr[i]; } return max_val; }字符串去重:给定一个字符串,去除所有之前出现过的字符,只保留第一次出现的字符。示例输入:hello,welcome to xiaomi,示例输出:helo,wcmt xiaivoid kill_same(char *o, char *n) { int i = 0, k = 0; while (o[i] != '\0') { int exists = 0; for (int j = 0; j < k; j++) { if (o[i] == n[j]) exists = 1; } if (!exists) n[k++] = o[i]; i++; } n[k] = '\0'; }基于数组实现一个环形缓冲区,要求在不使用额外变量(如 count 或 full_flag)的情况下,仅依靠 head 和 tail 两个索引来区分缓冲区是空还是满。请说明你的设计思路并实现关键的入队和出队函数。#define BUFFER_SIZE 16 typedef struct { int buffer[BUFFER_SIZE]; size_t head; size_t tail; } circular_buffer_t; void circular_buffer_init(circular_buffer_t *cb) { if (cb == NULL) return; cb->head = 0; cb->tail = 0; } static bool is_empty(circular_buffer_t *cb) { return cb->head == cb->tail; } static bool is_full(circular_buffer_t *cb) { return (cb->tail + 1) % BUFFER_SIZE == cb->head; } int circular_buffer_enqueue(circular_buffer_t *cb, int data) { if (cb == NULL || is_full(cb)) { return -1; } cb->buffer[cb->tail] = data; cb->tail = (cb->tail + 1) % BUFFER_SIZE; return 0; } int circular_buffer_dequeue(circular_buffer_t *cb, int *data) { if (cb == NULL || is_empty(cb) || data == NULL) { return -1; } *data = cb->buffer[cb->head]; cb->head = (cb->head + 1) % BUFFER_SIZE; return 0; }