古詩詞大全網 - 成語大全 - C語言中,STRNCPY的用法

C語言中,STRNCPY的用法

原型:char * strncpy(char *dest, char *src, size_t n); 功能:將字符串src中最多n個字符復制到字符數組dest中(它並不像strcpy壹樣遇到NULL就開始復制,而是等湊夠n個字符才開始復制),返回指向dest的指針。 說明: 如果n > dest串長度,dest棧空間溢出產生崩潰異常。 否則: 1)src串長度<=dest串長度,(這裏的串長度包含串尾NULL字符) 如果n=(0, src串長度),src的前n個字符復制到dest中。但是由於沒有NULL字符,所以直接訪問dest串會發生棧溢出的異常情況。 如果n = src串長度,與strcpy壹致。 如果n = dest串長度,[0,src串長度]處存放src字串,(src串長度, dest串長度]處存放NULL。 2)src串長度>dest串長度 如果n =dest串長度,則dest串沒有NULL字符,會導致輸出會有亂碼。如果不考慮src串復制完整性,可以將dest最後壹字符置為NULL。 綜上,壹般情況下,使用strncpy時,建議將n置為dest串長度(除非妳將多個src串都復制到dest數組,並且從dest尾部反向操作),復制完畢後,為保險起見,將dest串最後壹字符置NULL,避免發生在第2)種情況下的輸出亂碼問題。當然嘍,無論是strcpy還是strncpy,保證src串長度<dest串長度才是最重要的。

因為字符串需結束符,該程序沒給b加結束符,所以導致亂碼,完整的程序如下:

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

main()

{

char a[]="uewreuwiurweu";

char b[100];

strncpy(b,a,1);

b[1]='\0';

puts(b);

system("pause");

}