1. 程式人生 > >寫一個函式,完成記憶體之間的拷貝。[考慮問題是否全面]

寫一個函式,完成記憶體之間的拷貝。[考慮問題是否全面]

#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include  <assert.h>
void *memmove(void *dest, const void *src, size_t count)
{
	assert((dest != NULL) && (src != NULL));     //安全檢查  
	assert(count > 0);

	char *psrc = (char *)src;
	char *pdest = (char *)dest;
	//檢查是否有重疊問題  
	if (pdest < psrc)
	{
		//正向拷貝  
		while (count--)
			*pdest++ = *psrc++;
	}
	else if (psrc < pdest)
	{
		//反向拷貝  
		psrc = psrc + count - 1;
		pdest = pdest + count - 1;
		while (count--)
			*pdest-- = *psrc--;
	}
	return dest;
}

void *memmcpy(void *dest, const void *src, size_t count)
{
	assert((dest != NULL) && (src != NULL));     //安全檢查  
	assert(count > 0);

	char *psrc = (char *)src;
	char *pdest = (char *)dest;
	while (count--)
		*pdest++ = *psrc++;

	return dest;
}

int main()
{
	char str[] = "helloworld!";
	memmove(str + 3, str, 4);
	char str1[] = "helloworld!";
	memmcpy(str1 + 3, str1, 4);

	printf("%s\n", str);
	printf("%s\n", str1);

	getchar();
	return 0;
}

相關推薦

一個函式完成記憶體之間拷貝[考慮問題是否全面]

#include "stdafx.h" #include <stdio.h> #include <string.h> #include <assert.h> vo

一個函式使給定的一個二維陣列(3×3)轉置即行列互換

import java.util.Scanner; public class Main {     public static void main(String[] args) {       &n

一個函式將3 3矩陣轉置

#include "stdio.h" void Transpose(int (*matrix)[3]) {     int temp;     int i, j;     &

YTUOJ——一個函式使給定的一個二維陣列(3×3)轉置即行列互換

題目描述 寫一個函式,使給定的一個二維陣列(3×3)轉置,即行列互換。 輸入 一個3x3的矩陣 輸出 轉置後的矩陣 樣例輸入 1 2 3 4 5 6 7 8 9 樣例輸出 1 4 7 2 5 8 3 6 9 答案 #include "iostream

一個函式隨機生成N條不重複的手機號

方法一:import random def phone(count): results = [] while len(results)!=count: starts = [138,156,130,170,188,189] start = random.ch

一個函式輸入一個數隨機生成N條郵箱

寫一個函式,這個函式的功能是,傳入一個數字,產生N條郵箱,產生的手機號不能重複。郵箱前面的長度是6 - 12之間,產生的郵箱必須包含大寫字母、小寫字母、數字和特殊字元 import random

ACMNO.24 C語言-轉置矩陣 一個函式使給定的一個二維陣列(3×3)轉置即行列互換 輸入 一個3x3的矩陣 輸出 轉置後的矩陣 樣例

題目描述 寫一個函式,使給定的一個二維陣列(3×3)轉置,即行列互換。 輸入 一個3x3的矩陣 輸出 轉置後的矩陣 樣例輸入 1 2 3 4 5 6 7 8 9 樣例輸出 1 4 7 2 5 8 3 6 9 來源/分類 C語言

一個函式求兩個整數之和要求在函式體內不得使用+、-、*、/四則運算子號

思路:首先看十進位制是如何做的: 5+7=12,三步走第一步:相加各位的值,不算進位,得到2。第二步:計算進位值,得到10. 如果這一步的進位值為0,那麼第一步得到的值就是最終結果。第三步:重複上述兩步,只是相加的值變成上述兩步的得到的結果2和10,得到12。同樣我們可以用三

某公司的僱員分為以下若干類一個程式把若干各種型別的員工放在一個Employee 數組裡一個函式打印出某月每個員工的工資數額

某公司的僱員分為以下若干類:Employee:這是所有員工總的父類,屬性:員工的生日月份。方法:getSalary(int month) 根據引數月份來確定工資,如果該月員工過生日,則公司會額外獎勵100 元。SalariedEmployee:Employee 的子類,拿固定工資的員工。屬性:月薪Hourly

一個函式輸入int型返回整數逆序後的字串如:輸入123返回“321” 要求必須用遞迴不能用全域性變數輸入必須是一個引數必須返回字串

看了一下這個文章http://www.codeceo.com/article/alibaba-interview-java.html 順手寫了下 應該符合題目意思吧~~ #include <cstdio> #include <iostream> #i

8.7 有一字串包含n個字元一個函式將此字串從第 m個字元開始的全部字元複製成為另一個字串

8.7 有一字串,包含n個字元。寫一個函式,將此字串從第 m個字元開始的全部字元複製成為另一個字串。個人程式碼如下:#include<stdio.h> #include<string.

一個函式實現一個整形有序陣列的二分查詢

程式程式碼: #include <stdio.h> #include <windows.h> int binary_search(int arr[], int num, int

c++一個函式實現輸入一個字串將其中的字元按逆序輸出

#include "stdafx.h" #include <iostream> #include <string.h> using namespace std; #define N 20 int _tmain(int argc, _TCHAR* argv[]) {

c語言 一個函式輸入n求斐波拉契數列的第n項(5種方法層層優化)

                寫一個函式,輸入n,求斐波拉契數列的第n項。 斐波拉契數列:1,1,2,3,5,8...,當n

用javascript一個函式作用是去除字串前後空格

<html> <head></head> <body> <script> function trim(str){ return str.replace(/(^\s*)||(\s*$)/g,""

題目:一個函式求兩個整數之和要求在函式體內不得適用+-* ./ 四則運算子號

題目:寫一個函式,求兩個整數之和,要求在函式體內不得適用+,-,* ,./  四則運算子號     面試的時候被問道這個問題,首先我們分析人們是如何進行十進位制的加法的,比如如何得出5+17=22這個結果的,實際上,我們可以分三步進行:第一步只做各位相加不進

用java一個函式實現Fibonacci數列演算法(1,1,2,3,5,8,13......)

這個演算法就是第一個數的救國是前兩個數相加, 這個還是結合例子比較好想 public class dd1 { public void getFibonacci(int number){ int nLeft = 0; int nRight = 1; System.out.pr

c語言:一個函式輸入n求斐波拉契數列的第n項(5種方法層層優化)

寫一個函式,輸入n,求斐波拉契數列的第n項。斐波拉契數列:1,1,2,3,5,8...,當n大於等於3時,後一項為前面兩項之和。解:方法1:從斐波拉契數列的函式定義角度程式設計#include<stdio.h>int fibonacci(int n){int nu

一個函式儘可能高效的從一個標準url中取出檔案的副檔名

<?php  function getExt($url)  {    $arr = parse_url($url);//parse_url解析一個 URL 並返回一個關聯陣列,包含在 URL 中出現的各種組成部分    //'scheme' => string '

一個函式返回0-20之間的隨機整數

直接看程式碼。     function  suiji(){        var a= Math.floor(Math.random()*21);         // Math.random()  返回 大於或等於0  且  小於1  的小數,