天天看點

c語言中strncpy函數,函數原型和頭檔案

1、函數原型。

#include <stdio.h>

char *strncpy(char *s1, const char *s2, size_t n) //函數的傳回值為指針,形參為兩個指針(字元串數組,相當于指向第一個字元的指針)和n(指派字元個數)。 
{
    char *tmp = s1;  //将指針tmp聲明為指針s1,指向字元串第一個字元的指針, 
    while(n)
    {
        if(!(*s1++ = *s2++))  // 将str2的元素依次指派給str1,當str2小于n時,一直指派到最後的null字元終止,當str2大于n時,複制n個元素。 
            break;   // 當str2的長度小于n時,此循環判斷條件起作用 
        n--;  // 當n小于字元串str2的長度時,此時循環判斷條件起作用 
    }
    
    while(n--)  // 當str2小于n時,遞減後n扔為正數,将字元串數組s1後依次複制n-str2長度個'\0'。 
        *s1++ = '\0';
    return tmp;  // 函數傳回指針,指向字元串str1第一個字元的指針。 
} 

int main(void)
{
    char str1[128] = "abcdefg";
    char str2[128] = "123456789";
    
    size_t n;
    printf("n = "); scanf("%u", &n);
    
    printf("copy result: %s\n", strncpy(str1, str2, n));  // 函數實參為字元串數組的名稱(相當于指向第一個元素的指針)和複制的字元個數n。 
    
    return 0;
}      
c語言中strncpy函數,函數原型和頭檔案

函數原型修改

#include <stdio.h>

char *strncpy(char *s1, const char *s2, size_t n) //函數的傳回值為指針,形參為兩個指針(字元串數組,相當于指向第一個字元的指針)和n(指派字元個數)。 
{
    char *tmp = s1;  //将指針tmp聲明為指針s1,指向字元串第一個字元的指針, 
    while(n)
    {
        if(!(*s1++ = *s2++))  // 将str2的元素依次指派給str1,當str2小于n時,一直指派到最後的null字元終止,當str2大于n時,複制n個元素。 
            break;   // 當str2的長度小于n時,此循環判斷條件起作用 
        n--;  // 當n小于字元串str2的長度時,此時循環判斷條件起作用 
    }
    
    while(n--)  // 當str2小于n時,遞減後n扔為正數,将字元串數組s1後依次複制n-str2長度個'\0'。 
        *s1++ = '\0';
    *s1 = '\0'; //可以實作僅保留複制的部分
    return tmp;  // 函數傳回指針,指向字元串str1第一個字元的指針。 
} 

int main(void)
{
    char str1[128] = "abcdefg";
    char str2[128] = "123456789";
    
    size_t n;
    printf("n = "); scanf("%u", &n);
    
    printf("copy result: %s\n", strncpy(str1, str2, n));  // 函數實參為字元串數組的名稱(相當于指向第一個元素的指針)和複制的字元個數n。 
    
    return 0;
}       
c語言中strncpy函數,函數原型和頭檔案
#include <stdio.h>
#include <string.h>  // strncpy的頭檔案 

int main(void)
{
    char str1[128] = "abcdefg";
    char str2[128] = "123456789";
    
    size_t n;
    printf("n = "); scanf("%u", &n);
    
    printf("copy result: %s\n", strncpy(str1, str2, n));  //函數實參為兩個字元串數組(相當于指向數組第一個元素的指針,函數間數組的傳遞是以指向第一個元素的指針進行的)和
    //複制的元素個數n。 
    
    return 0;    
}