Implementação detalhada de simulação e estratégia

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.

Acho que você gosta

Origin blog.csdn.net/DR5200/article/details/112525326
Recomendado
Clasificación