A diferença e o princípio de strcat e strncat

Todos nós sabemos que strcat e strncat são funções que acrescentam caracteres a uma string. Qual é a diferença entre eles? Quais são seus princípios?

Em primeiro lugar, devemos entender os princípios dos dois para podermos distinguir entre eles;
o uso da função strcat de chamada strcat, passar duas matrizes de string ou uma matriz de string e uma string, você precisa chamar o cabeçalho string.h arquivo ;

    char arr1[30] = "abcd";
    char arr2[] = "efd";
    strcat(arr1, arr2);
    ----------------------
     strcat (str,"concatenated.")

O código-fonte é (eu mesmo implementei, ele será diferente do código-fonte real, mas o princípio é o mesmo)
Etapa 1: Aponte o ponteiro da string adicionada para a string '\ 0'
Etapa 2: Altere a troca de sequência de caracteres adicionada com o '\ 0' da sequência de caracteres adicionada.
Etapa 3: Defina a última posição de str para '\ 0'

void strcat(char* str, const char* d)
{
    while (*str)
        str++;
    while (*d != '\0')
    {
        *str = *d;
        str++;
        d++;
    }
    str++;
    *str = '\0';
}
int main()
{
    char arr1[30] = "abcd";
    char arr2[] = "efd";
    strcat(arr1, arr2);
    printf("%s\n", arr1);
    return 0;
}

Uso de strncat - chame a função strncat, passe duas strings e um valor inteiro, o valor inteiro representa o número de caracteres a serem acrescentados, você precisa chamar o arquivo de cabeçalho string.h;

  char str1[20] = "abcde";
  char str2[20] = "cdefad";
  strncat (str1, str2, 6);

Código-fonte:
Passo 1: Mova o ponteiro de arr1 para '\ 0'
Passo 2: Troque o elemento apontado por arr2 pelo elemento apontado por arr1;

void my_strncat(char* arr1, char* arr2, int len)
{
    assert(arr1);
    assert(arr2);
    arr1 = arr1 + len;
    while (len-- != 0)
    {
        //第一步:先把arr1的指针移到'\0'处
        //第二步:把arr2所指向的元素与arr1所指向的元素交换;
        *arr1 = *arr2;
        arr1++;
        arr2++;
    }
}
int main()
{
    char arr1[30] = "abcdeef";
    int len = strlen(arr1);
    my_strncat(arr1, arr1, len);
    printf("%s\n", arr1);
    return 0;
}

Pode ser visto claramente que os parâmetros dos dois são inconsistentes, mas o efeito é o mesmo. A principal diferença entre os dois é que a condição final da string adicionada de strcat () é str2 == '\ 0' (str2 é necessário A string adicionada); a condição para o final do loop de strncat é que o número de strings a serem acrescentadas len seja 0;

Então, por que deveria haver duas funções que alcançam o mesmo efeito?
Parece que o efeito de implementação dos dois é o mesmo, mas se você quiser adicionar a string original à string original, você só pode usar a função strncat;

    char arr1[30] = "abcd";
    strcat(arr1, arr1);

Como strcat essencialmente troca o '\ 0' da string a ser adicionada com o elemento da string adicionada, então quando a adição for ela mesma, '\ 0' será trocado pelo elemento anterior, quando todas as trocas forem concluídas. Mais tarde, você descobrirá que '\ 0' foi para trás novamente, de modo que a condição de finalização não será mais estabelecida e você entrará em um loop infinito; a conveniência de strcat () é que pode ser alcançado passando apenas dois parâmetros, o que é relativamente simples;

No entanto, é recomendável usar strncat (), porque a possibilidade mencionada acima de cair em um loop infinito não ocorrerá. No máximo, mais um comprimento de etapa (strlen (nome do array)) é contado e strncat () tem um vantagem indispensável, que é a liberdade Controle os personagens a serem adicionados;

Acho que você gosta

Origin blog.51cto.com/15083094/2627811
Recomendado
Clasificación