1. 程式人生 > >C函式庫中的strncpy實現

C函式庫中的strncpy實現

/*
*[email protected] 轉載請註明出處
*原型:extern char *strncpy(char *dest, char *src, int n);
*用法:#include <string.h>
*功能:把src所指由NULL結束的字串的前n個位元組複製到dest所指的陣列中。
*說明:
*   如果src的前n個位元組不含NULL字元,則結果不會以NULL字元結束。
*   如果src的長度小於n個位元組,則以NULL填充dest直到複製完n個位元組。
*   src和dest所指記憶體區域不可以重疊且dest必須有足夠的空間來容納src的字串。
*   返回指向dest的指標。
*使用C函式庫中的strncpy
*/
#include <cstdio>
#include <cstring>

int main(int args,char **argv)
{
    char str1[] = "To be or not to be";
    char str2[40];
    char str3[40];

    strncpy(str2,str1,sizeof(str1));
    strncpy(str3,str1,5);
    str3[5] = '\0';

    printf("str2 : %s\nstr3 : %s\n",str2,str3);
    getchar();
    return 0;
}

/*
*
[email protected]
轉載請註明出處 *原型:extern char *strncpy(char *dest, char *src, int n); *用法:#include <string.h> *功能:把src所指由NULL結束的字串的前n個位元組複製到dest所指的陣列中。 *說明: * 如果src的前n個位元組不含NULL字元,則結果不會以NULL字元結束。 * 如果src的長度小於n個位元組,則以NULL填充dest直到複製完n個位元組。 * src和dest所指記憶體區域不可以重疊且dest必須有足夠的空間來容納src的字串。 * 返回指向dest的指標。 *自己實現strncpy */ #include <cstdio> char * _strncpy(char * dest,const char * src,size_t count) { char * ret = dest; while(count && (*dest++ = *src++)) count--; if(count) { while(--count) { *(dest++) = '\0'; } } return ret; } int main(int args,char ** argv) { char str1[] = "To be or not to be"; char str2[40]; char str3[40]; _strncpy(str2,str1,sizeof(str1)); _strncpy(str3,str1,5); str3[5] = '\0'; printf("str2 : %s\nstr3 : %s",str2,str3); getchar(); return 0; }

相關推薦

C函式strncpy實現

/* *[email protected] 轉載請註明出處 *原型:extern char *strncpy(char *dest, char *src, int n); *用法:#include <string.h> *功能:把src所指由NULL結

編寫一個函式 reverse_string(char * string)(遞迴實現實現:將引數字串的字元反向排列。 要求:不能使用C函式的字串操作函式

給定字串,程式碼如下: #include <stdio.h> #include <stdlib.h> #include <assert.h> char* reverse_string(char *str) { assert(str !

編寫一個函式 reverse_string(char * string)(遞迴實現),將引數字串的字元反向排列。 要求不能使用C函式的字串操作函式

#include<stdio.h> #include<stdlib.h> int str(char *string) { int n = 0; while (*string) { n++; string++; } return n; } void rever

C函式的memset實現

/* *[email protected] 轉載請註明出處 *原型:void *memset(void *ptr, int c, size_t count); *用法:#include <string.h> *功能:把ptr所指記憶體區域的前count

Java小題,通過JNI調用本地C++共享的對應方法實現楊輝三角的繪制

question 文件夾 path ron variable iostream ring printf spl 1.在Eclipse中配置Javah,配置如下 位置是你javah.exe在你電腦磁盤上的路徑 位置:C:\Program Files\Java\jdk1.

C語言常用函式函式

1.pow(x,y);求x的y次方; 2.strstr(str1,str2);判斷str2是否為str1的子串,若是返回首次出現的位置,若不是返回NULL; 3.strcat(char* dest, const char *src);字串剪接函式,將src接

模擬實現C++標準的auto_ptr

一、引言 C++標準庫中有一個auto_ptr可供我們參考。這是一個用來包裝原生指標(native pointer)的物件,聲名狼藉的記憶體漏洞(memory leak)問題可籍此獲得解決。根源在於

C++標準排序函式sort的用法

(一)為什麼要用c++標準庫裡的排序函式 Sort()函式是c++一種排序方法之一,學會了這種方法也打消我學習c++以來使用的氣泡排序和選擇排序所帶來的執行效率不高的問題!因為它使用的排序方法是類似於快排的方法,時間複雜度為n*log2(n),執行效率較高! (二)c++標準庫裡的排序函式的使用方法 I)S

C標準的快速排序(quick-sort)函式 [簡單應用]

#include <iostream> #include <cstdlib> using namespace std; const size_t INDEX_ZERO = 0; int com(const void *a,const void *

C++標準的list的實現原理

在C++中採用了大量的標誌模板庫(STL)實現程式的設計,這種設計方式使得不同型別的物件都能通用,而不再是C語言中的通常對於不同的型別需要重新設計或者或者比較採用間接的指標操作。C++中的這種方式簡化了寫程式碼的複雜度,但是增加了編譯器的複雜度和難度。 在資料結構中連結串

c++動態使用命名空間的問題

family 不能 eight 函數 names bsp ++ data- color 這是C++才會有的語言特性. 假如你使用一個程序庫,他裏面有桓霰淞拷衋bc,可是你自己也不小心定義了一個叫abc的變量,這樣就會引起重定義錯誤.所以為了避免這樣

C++標準棧和隊列的一些基本操作

AS PE 元素 返回值 nbsp 返回 void 入隊 style 棧:   <1>使用棧,要包含頭文件:#include <stack>   <2>定義棧,stack<Type> s; 其中Type為數據類型,可以是基本數

【轉】Linux C函式參考

  asctime(將時間和日期以字串格式表示)clock(取得程序佔用CPU的大約時間)ctime(將時間和日期以字串格式表示)difftime(計算時間差距)ftime(取得目前的時間和日期)gettimeofday(取得目前的時間)gmtime(取得目前的時間和日期)loca

關於 C#呼叫一個C/C++dll執行時實現多個應用(靜態變數區分) 的解決方法

需求         VS編寫了純C(windows)通訊庫,需要多例項(靜態變數標誌一個例項,達到互相靜態變數不干涉)。   當前問題         dll中使用了全域性static的標

C++ 標準的執行緒安全

執行緒安全規則應用到標準 C++ 庫中的所有類,這也包括 shared_ptr,如下所述。 有時提供更強的保證(例如,如下所述的標準 iostream 物件和專門用於多執行緒的型別,如 中的型別)。 從多個執行緒讀取某個物件時,該物件是執行緒安全的。 例

C++標準的堆-heap

前言 本文介紹如何使用STL裡的heap(堆)演算法。第一次接觸heap這種資料結構是在大學的資料結構教材上,它是一棵完全二叉樹。在STL中,heap是演算法的形式提供給我們使用的。包括下面幾個函式: make_heap: 根據指定的迭代器區間以及一個可選的比較函式,

C++:C++標準的關聯式容器Map

Map每個元素都是 key/value pair ,其中key是排序準則的基準。每個key只能出現一次,不允許重複。Map 也可被視為一種關聯式陣列,也就是“索引可為任意型別”的陣列。 以具體的兩個例子解釋什麼是map 例項一 #include "pch.h" #include

C函式引數的三個點

C++中有函式過載這種方法,以供我們呼叫時要可以不確定實參的個數,其實 C 語言也可以,而且更高明! 我們在stdio.h 中可以看到 printf() 函式的原型: int printf(char * format,...) 事實上,我們如果要寫這樣的函式也可以

C++函式的理解:寫一個C++程式(排序)然後呼叫自己寫的(附帶程式)

1.自己寫一個庫:和建工程是一樣的,但是建的專案是DLL檔案,然後再其工程下新增原始檔和標頭檔案,原始檔正常寫,標頭檔案是有要求的,__declspec(dllexport)的加入,程式在下面是給出的,所以往下讀,你會有所得的!!最終得到DLL,LIB,以及.h檔案(.h檔案只是一個路徑,在

C 函式 strstr 的高效實現

      C函式庫中有一個函式 strstr(char*, char*),它實現的是在一個原字串中查詢一個子串,如果找到這樣的一個子串,返回這個子串在原字串中的起始位置,若沒有找到這樣的一個子串,則返