Artigo Diretório
Introdução ao strncpy
Rotina | Cabeçalho Obrigatório | Compatibilidade |
---|---|---|
forte | <string.h> | ANSI, Win 95, Win NT |
Protótipo de função:
char * strncpy (char * strDest, const char * strSource, size_t count);
Características:
A função strncpy copia os caracteres iniciais de strSource para strDest e retorna o endereço de strDest. Se a contagem for menor ou igual ao comprimento de strSource, os caracteres nulos não serão anexados automaticamente à string copiada. Se a contagem for maior que o comprimento de strSource, a string de destino será preenchida com caracteres nulos dentro da contagem de comprimento. Se a string de origem e a string de destino se sobrepõem, o comportamento de strncpy é indefinido.
1. a contagem é menor ou igual ao comprimento de strsource
#include<stdio.h>
int main()
{
char arr1[] = "abcdef";
char arr2[] = "hello bit";
strncpy(arr1, arr2, 4);
}
Pode-se ver na janela de monitoramento que quando a contagem é menor ou igual ao comprimento de strSource, os caracteres nulos não serão anexados automaticamente à string copiada.
2. a contagem é maior que o comprimento de strSource
#include<stdio.h>
int main()
{
char arr1[] = "abcdefghi";
char arr2[] = "bit";
strncpy(arr1, arr2, 6);
}
Pode-se ver na janela de monitoramento que quando a contagem for maior que o comprimento de strSouce, após copiar a string de origem, anexe '\ 0' ao final da string de destino até contar.
Implementação analógica de strncpy
#include<stdio.h>
char* my_strncpy(char* dest, const char* src,size_t count)
{
char* start = dest; // 记录目标字符串起始位置
while (count && (*dest++ = *src++)) // 拷贝字符串
{
count--;
}
if (count) // 当count大于src的长度时,将补充空字符
{
while (--count)
{
*dest++ = '\0';
}
}
return start;
}
int main()
{
char arr1[] = "abcdefghi";
char arr2[] = "bit";
my_strncpy(arr1, arr2, 6);
printf("%s\n", arr1);
}
Pode ser mais difícil entender este código:
*dest++ = *src++
Atribua o valor de * src a * dest, depois src ++, dest ++ e assim por diante, até que src aponte para um caractere nulo.