Marcia Rosa Postado Setembro 29, 2010 Denunciar Share Postado Setembro 29, 2010 (editado) Olá,Novamente recorro a ajuda de vocês porque tem coisas que ainda estou aprendendo e descobrindo os segredos.Baixei um código da internet onde tem a seguinte variável:static uint8 var1[512+1];strcpy(var1, "123456");[/CODEBOX]Nesse caso acima está estático. E preciso do valor dinâmico. Daí tentei assim (e não funcionou):[CODEBOX]static uint8 var1[512+1];char str_tmp = "123456"; strcpy(var1, str_tmp);Tentei assim (e não funcionou):static uint8 var1[512+1];char *str_tmp = "123456"; strcpy(var1, str_tmp);[/CODEBOX]Tentei assim (e não funcionou):[CODEBOX]static uint8 var1[512+1];char str_tmp = "123456"; strcpy(var1, (char)str_tmp);Tentei assim (e não funcionou):static uint8 var1[512+1];char str_tmp = "123456"; int i = 0;for(i = 0; i <= strlen(str_tmp) - 1; i++){//tentei... var1[i] = (byte)str_tmp[i];//tenteivar1[i] = (int)str_tmp[i];}[/CODEBOX]Qualquer dica que pode me ajudar a achar um caminho, serve.Obrigada. Editado Outubro 7, 2010 por Marcia Rosa Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 RonaldoRG Postado Setembro 29, 2010 Denunciar Share Postado Setembro 29, 2010 Se for erro de compilação, posta a saida do compilador.Abraço. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Marcia Rosa Postado Setembro 30, 2010 Autor Denunciar Share Postado Setembro 30, 2010 Se for erro de compilação, posta a saida do compilador.Abraço.Ronaldo, está compilando perfeitamente. Só que não tenho debugar porque testo num terminal com características específicas que não tenho como simular no meu PC. Daí ao rodar lá, ou não pega o valor ou dá erro e a app reinicia sem exibir a mensagem de erro.Obrigada. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 RonaldoRG Postado Setembro 30, 2010 Denunciar Share Postado Setembro 30, 2010 Já tentou botar char no lugar de uint8? E também não compreendi o seu erro.Tem uns códigos que você postou que não deve dar certo mesmo. Esse trecho mesmo não rola:char str_tmp = "123456"; Tenta assim pra ver: uint8 var1[512+1]; // Porque não 513 ? strcpy(var1, "123456");Abraço. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Marcia Rosa Postado Outubro 4, 2010 Autor Denunciar Share Postado Outubro 4, 2010 Já tentou botar char no lugar de uint8? E também não compreendi o seu erro.Tem uns códigos que você postou que não deve dar certo mesmo. Esse trecho mesmo não rola:char str_tmp = "123456"; Tenta assim pra ver: uint8 var1[512+1]; // Porque não 513 ? strcpy(var1, "123456");Abraço.Ronaldo,Não posso mudar o uint8 pois faz parte do sistema já em uso onde existem outras bibliotecas usando esse modelo. O 512+1 também não entendi porque foi feito assim. Como estava assim, não mexi.Quanto a sua dica de usar o strcpy para a variável var1, como eu disse assim sempre funcionou! Só que os valores devem ser dinâmicos e não estáticos como está ali.Mesmo assim, agradeço.Marcia. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Durub Postado Outubro 5, 2010 Denunciar Share Postado Outubro 5, 2010 Talvez o 512+1 seja para armazenar 512 caracteres na string (512 + 1 do null), e o autor quis deixar explícito essa informação."uint8" deve significar "unsigned char", não é a mesma coisa que char.O problema no código não está no strcpy, está na declaração da string.static uint8 var1[512+1]; char str_tmp = "123456"; /* não funciona, pois um char somente guarda um byte, e você está querendo armazenar 7 (6 + 1 do null, o terminador da string) */ strcpy(var1, str_tmp); Você deve fazer assim: static uint8 var1[512+1]; char str_tmp[] = "123456"; /* funciona, pois o compilador está alocando 7 bytes para a variável str_tmp */ strcpy(var1, str_tmp);É isso que você quer?Abraços! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Marcia Rosa Postado Outubro 7, 2010 Autor Denunciar Share Postado Outubro 7, 2010 Talvez o 512+1 seja para armazenar 512 caracteres na string (512 + 1 do null), e o autor quis deixar explícito essa informação."uint8" deve significar "unsigned char", não é a mesma coisa que char.O problema no código não está no strcpy, está na declaração da string.static uint8 var1[512+1]; char str_tmp = "123456"; /* não funciona, pois um char somente guarda um byte, e você está querendo armazenar 7 (6 + 1 do null, o terminador da string) */ strcpy(var1, str_tmp); Você deve fazer assim: static uint8 var1[512+1]; char str_tmp[] = "123456"; /* funciona, pois o compilador está alocando 7 bytes para a variável str_tmp */ strcpy(var1, str_tmp);É isso que você quer?Abraços!Durub,Primeiro peço desculpas pela demora em responder mas estava em viagem. E obrigada pela explicação. Testei aqui e já me ajudou. ao menos posso correr atrás do resto agora.Obrigada pela peciência de explicar, pois como disse estou começando no C e tenho vícios de outras linguagens, e alguns colegas de fórum acham que estamos pedindo para resolver o problema mas na verdade uma simples explicação já ajudaria para esse e vários outros problemas que possamos vir a encontrar.AbçMarcia. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Marcia Rosa
Olá,
Novamente recorro a ajuda de vocês porque tem coisas que ainda estou aprendendo e descobrindo os segredos.
Baixei um código da internet onde tem a seguinte variável:
Nesse caso acima está estático. E preciso do valor dinâmico.
Daí tentei assim (e não funcionou):
static uint8 var1[512+1];
char str_tmp = "123456";
strcpy(var1, str_tmp);
Tentei assim (e não funcionou):
Tentei assim (e não funcionou):
static uint8 var1[512+1];
char str_tmp = "123456";
strcpy(var1, (char)str_tmp);
Tentei assim (e não funcionou):
Qualquer dica que pode me ajudar a achar um caminho, serve.
Obrigada.
Editado por Marcia RosaLink para o comentário
Compartilhar em outros sites
6 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.