A melhor época para plantar uma árvore é há dez anos, seguida agora!
Eu aprendi sobre matrizes antes e acredito que você já tenha ouvido a palavra matriz de caracteres! Vamos aprender sobre constantes de string da linguagem C (chamadas literais de string na linguagem C) e variáveis de caracteres.
Um, literal de string
1. Sequências de escape em literais de string
Literais de string também podem conter sequências de escape (\ ne outras sequências de escape). Observação: as sequências de escape para números hexadecimais e octais são mais complicadas, portanto, use-as com cuidado!
Por exemplo:
"hello\nworld\n"
O resultado é: olá
mundo
2. Continuação de variáveis de string
Às vezes, a string literal é muito longa para ser colocada em uma linha sozinha, geralmente um \ termina no final, então a linguagem C pode continuar digitando na próxima linha. Mas o efeito desse recuo não é óbvio. Um exemplo é o seguinte:
#include<stdio.h>
int main(void)
{
printf("ABCDE\
FGHI\n");
printf("abcde\
fghi\n");
printf("123"
"456\n");
}
Pode-se ver que se você deseja imprimir a string em uma linha ao usar \, não há como garantir o formato de indentação, então há uma maneira de continuar a string literal, ou seja, "..." ". .. "dois consecutivos podem ser combinados na mesma string.
3. Armazene o literal de string:
Essencialmente, a linguagem C trata os literais de string como matrizes de caracteres. (Mas a matriz de caracteres não é uma string! A string terá um \ 0 no final!)
Quando uma string literal de comprimento n aparece na linguagem C, a linguagem C alocará um espaço de comprimento n + 1 para ela! Esta memória é usada para armazenar os caracteres no literal de string e o espaço extra é usado para marcar o caractere extra (caractere vazio) no final da string. Este \ 0 é o sinal do final do literal de string, que tem escape Substitua o caractere \ 0. Observação: em vez de '0', o valor do código do caractere nulo é 0 e o código ASCII do caractere zero é 48.
Por exemplo: a string literal "abc" é armazenada como uma matriz com 4 caracteres (a, b, c, \ 0)
Literal de string "" (literal de string pode estar vazio. E um único caractere vazio é armazenado como \ 0)
Então, o que passamos quando usamos literais de string para passar parâmetros para a função printf? Uma vez que é tratado como um array, o compilador naturalmente o considera um ponteiro do tipo char *.
Por exemplo: printf ("abc");
Quando a função printf é chamada, o endereço de "abc" (ou seja, o ponteiro para a unidade de memória que armazena a letra a) é passado
Dê uma olhada no código a seguir e seus resultados de execução
#include<stdio.h>
int main()
{
char *a,*b,c;
a = "abc";
b = "";
c = '0';
printf("a = %s\n",a);
printf("b[0] = %d\n",b[0]);
printf("b = %s\n",b);
printf("c = %c\n",c);
return 0;
}
"" Há apenas um elemento \ 0 na string vazia, que é o inteiro 0, mas não a constante de caractere '0'! ! !
4. Operação de literais de string
Acabamos de ver este código
#include<stdio.h>
int main()
{
char *a,*b,c;
a = "abc";
b = "";
c = '0';
printf("a = %s\n",a);
printf("b[0] = %d\n",b[0]);
printf("b = %s\n",b);
printf("c = %c\n",c);
return 0;
}
Geralmente, literais de string podem ser usados onde ponteiros char * podem ser usados em linguagem C. Por exemplo, o literal de string pode aparecer no lado direito do símbolo de atribuição, como char * a acima, a = "abc". Essa operação de atribuição faz com que o ponteiro aponte para o primeiro caractere da string.
A linguagem C permite ponteiros subscritos, portanto, também podemos subscrever literais de string. Por exemplo, char ch; ch = "abc" [0].
Nota: Não modifique o literal da string! (O literal de string está localizado em um lugar chamado "segmento de código" no programa e é somente leitura, então não vou falar sobre isso aqui)
Duas, variáveis de string
Em algumas linguagens de programação, um tipo de dados é fornecido especificamente para variáveis de string. Na linguagem C, geralmente usamos arrays unidimensionais para armazenar strings (mas lembre-se de garantir que a string termine com um caractere nulo !!!)
Quando escrevemos funções de processamento de string, também devemos considerar o manuseio de caracteres nulos!
# define STR_LEN 10
...
char str [STR_LEN + 1]; // Aqui, STR_LEN é definido como 10 enfatizado que str pode armazenar uma string de até 10 caracteres, e então STR_LEN + 1 é usado para armazenar caracteres nulos na declaração do array str.
Obviamente, declarar uma matriz de caracteres com comprimento STR_LEN + 1 não significa que ela seja sempre usada para armazenar uma string com comprimento STR_LEN. O comprimento da string depende da posição do caractere vazio, e não do caractere array que armazena o comprimento da string. STR_LEN +1 apenas limita o comprimento máximo da string.
1. Inicializar variáveis de string
Pode ser inicializado no momento da declaração
char str1[] = "hello world"
Como devemos garantir que o comprimento do array seja maior do que o comprimento da string literal, podemos omitir seu comprimento. Nesse caso, o compilador adicionará automaticamente um caractere nulo a ele.
O literal de string "hello world" é copiado para o array str1 e, em seguida, o compilador adiciona caracteres nulos automaticamente, para que possa ser considerado uma variável de string.
Claro que existem outros métodos de inicialização, mas lembre-se do acima, o acima é o mais comumente usado.
2. Matriz de caracteres e ponteiro de caracteres
char *a = "hello world"
char a[] = "hello world"
Essas duas declarações parecem ser as mesmas. A primeira declara um ponteiro a e a última declara um array a. Ambas podem ser consideradas strings. No entanto, há uma grande diferença entre os dois e não podemos pensar que os dois anteriores sejam intercambiáveis.
Ao declará-lo como um ponteiro, não podemos modificar o literal da string. (Lembre-se do snippet de código na área somente leitura mencionada anteriormente)
Nota: A variável de ponteiro deve ser inicializada antes do uso!
3. Uso das funções puts (), gets (), printf (), scanf (), fgets ().