Manipulação de Strings em C [Ajuda]

09/08/2023

0

Boa tarde galera!!
Estou fazendo faculdade e na matéria de programação caiu a linguagem C, porém não entendo nada! Só um pouco da lógica mesmo, já que tenho trabalhado com outras linguagens.
Em uma das atividades pede para desenvolver um programa que inverta as variáveis, ou seja, troque elas de posição entre si. As variáveis podem ser de qualquer tipo, porém decidi fazer com "strings", invertendo o nome e sobrenome. Na hora do Output, o "Nome" não fica com valor nenhum, mas o "Sobrenome" sim.
Alguém poderia me ajudar ?
Segue o código:

#include <stdio.h> // Biblioteca para leitura e escrita
#include <string.h> // Biblioteca para manipulação de strings

// Usei uma função void pois não retorna nada, só executa uma ação
void inverteVar(char *variavel1, char *variavel2) {
    // Variável para armazenar um dos parâmetros
    char recebeVar[50];

    // Copia a string do primeiro parâmetro e a armazena
    strcpy(recebeVar, variavel1);

    // Copia a string do segundo parâmetro e a armazena no primeiro parâmetro
    strcpy(variavel1, variavel2);

    strcpy(variavel2, recebeVar);
    
    // Mostra na tela os valores invertidos
    printf("Valores invertidos\nNome: %s\nSobrenome: %s", variavel1, variavel2);
}

// Execução do programa
int main () {
    // Declara as variáveis a serem utilizadas
    char nome[] = "João";
    char sobrenome[] = "Henrique";

    // Chama a função e passa as variáveis criadas como parâmetros
    inverteVar(nome, sobrenome);

    return 0;
}
Itamar Jr

Itamar Jr

Responder

Posts

09/08/2023

Arthur Heinrich

Eu não entendo muito de C, mas ao atribuir a variável:

char nome[] = "João";

Entendo que o programa aloca 5 bytes para armazenar a palavra João, mais o terminador (caractere de código zero).
Quando você copia o sobrenome sobre o nome, está transferindo 9 caracteres do sobrenome, para uma variável que só possui 5 bytes alocados.

Provavelmente você invadiu o espaço de outras variáveis e pode ter comprometido o funcionamento do programa.
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar