TransWikia.com

"Transportar" variáveis entre funções, aparece caractere estranho no lugar?

Stack Overflow em Português Asked by Roberval Sena 山本 on December 29, 2020

Na função main quando imprimo um char, ele aparece um código estranho parecendo um hexa:

Mas quando imprimo o mesmo char em outra função ela aparece normal.

char tempA[100] = "1111";


int main () {

    strcpy(tempA , "11");
    printf("nn  )  ====>  tempTestA = %s nn", tempA);   // aqui NAO funciona, EXIBINDO APENAS CARACTERES estranhos..

  outraFuncao(tempA);

}

int outraFuncao(tempA)
{

    printf("nn  )  ====>  tempTestB = %s nn", tempA);   // aqui NAO funciona, EXIBINDO APENAS CARACTERES estranhos..


    strcpy(tempmais , "11");
    printf("nn  )  ====>  tempTestB = %s nn", tempmais);   // aqui funciona bem..

//restante da funcao...

}

E se eu chamo a função outraFuncao() com algum parâmetro, ele também mostra nos valores, apenas caracteres estranhos.

O que posso estar fazendo de errado?

3 Answers

Não se transporta variáveis de uma função para outra. Apenas se copia valores de uma função para outra. E alguns desses valores dão acesso à algum objeto disponível na memória.

Você precisa aprender sobre parâmetros. Você já usa argumentos em funções prontas que são esse valores que são passados na chamada das funções. Agora vai criar suas funções para receber esses valores, são os parâmetros.

O que fez é uso de variável global. Apesar de funcionar em alguns casos não é o jeito correto de fazer. Só deve usar essa forma quando dominar completamente todo o funcionamento de uma aplicação (o que muitos programadores nunca chegam nesse ponto, ainda mais em C).

Na verdade isso é uma simplificação. O ideal seria estudar mais profundamente o assunto.

Há um outro problema na impressão. Ela está mandando imprimir um caractere. Parece que quer imprimir uma string. Então teria que usar %s.

Funcionar não é o mesmo de estar certo.

void outraFuncao(char *temp) { //recebe 1 ponteiro p/ o objeto que é uma sequência de chars
    strcpy(temp, "11");
    printf("tempTest = %sn", temp);
}

int main() {
    char tempA[100] = "1111";
    outraFuncao(tempA); //passa o ponteiro do array
    printf("tempTest = %sn", tempA); //o objeto foi modificado, já que passou um ponteiro
    strcpy(tempA, "22"); //mudou o valor
    printf("tempTest = %sn", tempA); //imprimiu a string
}

Veja funcionando no ideone. E no repl.it. Também coloquei no GitHub para referência futura.

Correct answer by Maniero on December 29, 2020

%c é utilizado para char único, como você tem char[100] deve usar %s

Answered by Ton Angelo on December 29, 2020

Mude "%c" para "%s". Este é o erro. Mesmo no caso que está aparentemente funcionando, é por acaso...

Answered by zentrunix on December 29, 2020

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP