Como lidar com strings em C usando arrays de char, strlen, strcpy e funções relacionadas.
char terminado com \0printf("%s", s); imprimestrlen, strcpy, strcmp estão em <string.h>c + ('a'-'A')strcpy é inseguro — prefira snprintfchar s[10] é só um array\0 final (terminador NUL) — ele marca o fimchar é na verdade um inteiro (um código ASCII)strlen, aprenda primeiro como usá-las, e deixe os detalhes internos pra depois"Hello" é na verdade um array de 6 bytes: {'H','e','l','l','o','\0'}. "String = array + terminador" já te basta para começar.
char.'\0', que marca onde a string para.
char é na verdade um inteiro de 1 byte (8 bits). A letra 'A' que você vê na tela é nada mais que o número 65 interpretado como caractere.char c = 'A'; e char c = 65; são exatamente a mesma coisa.printf("%c", 65) → A / printf("%d", 'A') → 65
| Caractere | Decimal | Significado |
|---|---|---|
'\0' | 0 | NUL (terminador de string) |
'\n' | 10 | quebra de linha |
' ' | 32 | espaço |
'0'–'9' | 48–57 | dígitos ('0' = 48) |
'A'–'Z' | 65–90 | letras maiúsculas |
'a'–'z' | 97–122 | letras minúsculas |
'a' - 'A' = 32 — a distância entre maiúsculas e minúsculas alimenta vários truques comuns.#include <stdio.h> int main(void) { char c = 'A'; printf("c = %c\n", c); // → A (como caractere) printf("c = %d\n", c); // → 65 (como numero) // aritmetica em caracteres funciona printf("%c\n", c + 1); // → B (65+1=66) printf("%c\n", 'Z' - 3); // → W // armazenar 65 num char eh o mesmo que 'A' char d = 65; printf("%c\n", d); // → A return 0; }
char c = 'A'; char lower = c + ('a' - 'A'); // 'A' + 32 = 'a' // ou: char lower = c + 32;
char ch = '7'; // isso eh 55 (ASCII de '7') int n = ch - '0'; // 55 - 48 = 7 printf("%d\n", n); // → 7
if (c >= 'A' && c <= 'Z') // maiuscula? if (c >= '0' && c <= '9') // digito? // <ctype.h> tambem fornece isupper(c), isdigit(c)
char c = 'あ'; dispara um erro ou aviso. Caracteres não-ASCII precisam de vários bytes (3 bytes em UTF-8), então moram num array de char ou num wchar_t. Só ASCII (letras, dígitos, pontuação) é seguro num único char."Hello" é disposta na memória.'\0' final. Um array pequeno demais causa bug de buffer overflow.
scanf, note que você não precisa de &!&? O nome de um array como name decai para o endereço do primeiro elemento, então o endereço já é passado automaticamente.
scanf("%s"): para em espaço em branco e não verifica tamanho da entrada. Entrada longa pode estourar o array — na prática, fgets é mais seguro.
strlen da biblioteca padrão é o jeito fácil. Para ver como funciona, vamos construir uma versão caseira.'\0' é tão importante — é o marcador que diz onde a string termina.#include <string.h>.| Função | Objetivo | Exemplo | Notas |
|---|---|---|---|
strlen(s) | Tamanho da string | strlen("abc") → 3 | Não inclui '\0' |
strcpy(dst, src) | Copia uma string | strcpy(s, "Hello") | dst tem que ter tamanho suficiente |
strncpy(dst, src, n) | Copia até n caracteres | strncpy(s, src, 10) | Ajuda a prevenir buffer overflow |
strcat(dst, src) | Concatena | strcat(s, " World") | dst tem que caber o resultado |
strcmp(s1, s2) | Compara strings | strcmp(a, b) == 0 | 0 = igual; +/- mostram ordem |
strncmp(s1, s2, n) | Compara os primeiros n caracteres | strncmp(s, "ab", 2) | Prático para checar prefixos |
strchr(s, c) | Encontra um caractere | strchr(s, 'o') | Retorna NULL se não encontrado |
strstr(s, sub) | Encontra uma substring | strstr(s, "llo") | Retorna NULL se não encontrada |
#include <stdio.h> #include <string.h> int main(void) { char greeting[50]; strcpy(greeting, "Hello"); // greeting = "Hello" strcat(greeting, ", World!"); // greeting = "Hello, World!" printf("%s (%lu caracteres)\n", greeting, strlen(greeting)); return 0; }
==!if (s1 == s2) compara endereços, não conteúdos.strcmp(s1, s2) == 0.strcpy e strcat não checam o tamanho de destino.strncpy.struprstrlen'e') apareceTeste seu entendimento desta aula!
Strings em C são sempre terminadas com um caractere nulo \0, que é como o código diz onde a string termina.
"Hello" tem 5 caracteres mais o terminador nulo, então 6 bytes no total. Você precisa de char s[6] ou maior.
strcpy copia, strcmp compara e strlen retorna o tamanho. Inclua <string.h> para usá-las.