Page 1 of 2 12 ÚltimoÚltimo
Resultados 1 a 10 de 17
  1. #1
    Membro embreve's Avatar

    Data de Ingresso
    Mar 2023
    Posts
    94
    Thanks Thanks Given 
    156
    Thanks Thanks Received 
    9
    Thanked in
    8 Posts
    Mentioned
    4 Post(s)
    País
    Brazil

    C++, Função strcpy_s

    Boa noite a todos.
    Para os mais experientes , poderia me tirar uma duvida?
    Estou copiando do meu arquivo .txt uma String com o nome Diamante I com a função str_cpy_s, mais ela só está copiando o primeiro nome que seria Diamante.
    Está ignorando o espaço e o restante da String.

    Alguém pra me ajudar a corrigir?
    Muito obrigado.

  2. #2
    Developer C++ Ravoc's Avatar


    Data de Ingresso
    Aug 2022
    Posts
    46
    Thanks Thanks Given 
    81
    Thanks Thanks Received 
    69
    Thanked in
    20 Posts
    Mentioned
    2 Post(s)
    Humor
    Aggressive
    País
    France
    poste um trecho do código onde você está utilizando strcpy_s para que possamos analisar melhor.

  3. #3
    Membro embreve's Avatar

    Data de Ingresso
    Mar 2023
    Posts
    94
    Thanks Thanks Given 
    156
    Thanks Thanks Received 
    9
    Thanked in
    8 Posts
    Mentioned
    4 Post(s)
    País
    Brazil
    Citação Originally Posted by Ravoc Ver Post
    poste um trecho do código onde você está utilizando strcpy_s para que possamos analisar melhor.
    Opa!
    strcpy_s(this->PatentStruct[this->_Count].NamePatente, sizeof(this->PatentStruct[this->_Count].NamePatente), (Section.Rows[i].GetStringPtr(2)));

  4. #4
    Administrador PerfectZone Segredo's Avatar





    Data de Ingresso
    Jul 2022
    Posts
    72
    Thanks Thanks Given 
    87
    Thanks Thanks Received 
    1,183
    Thanked in
    52 Posts
    Mentioned
    11 Post(s)
    País
    Brazil
    Citação Originally Posted by embreve Ver Post
    Opa!
    strcpy_s(this->PatentStruct[this->_Count].NamePatente, sizeof(this->PatentStruct[this->_Count].NamePatente), (Section.Rows[i].GetStringPtr(2)));
    NamePatente - procure por isto, nele vai estar declarado qual tipo de variavel ela está (muito provavelmente seja do tipo char, veja qual o tamanho desse array imposto nela: quando falo tamanho é: char NamePatent[50] (50 seria seu tamanho)]

  5. The Following User Says Thank You to Segredo For This Useful Post:


  6. #5
    Membro embreve's Avatar

    Data de Ingresso
    Mar 2023
    Posts
    94
    Thanks Thanks Given 
    156
    Thanks Thanks Received 
    9
    Thanked in
    8 Posts
    Mentioned
    4 Post(s)
    País
    Brazil
    Citação Originally Posted by Denis Alves Ver Post
    NamePatente - procure por isto, nele vai estar declarado qual tipo de variavel ela está (muito provavelmente seja do tipo char, veja qual o tamanho desse array imposto nela: quando falo tamanho é: char NamePatent[50] (50 seria seu tamanho)]
    O tamanho está ok! O problema é na função mesmo. Como eu disse: a função não copia o espaço em branco e restante do nome. Fiz o teste usando _ ex: Diamante_I copiou todo o nome. Usando Diamant I com espaço, a função só puxa o primeiro nome o espaço e o I são ignorado. Espero que conseguido explicar.
    Last edited by embreve; 11-17-2024 at 06:37 PM.

  7. #6
    Developer C++ Ravoc's Avatar


    Data de Ingresso
    Aug 2022
    Posts
    46
    Thanks Thanks Given 
    81
    Thanks Thanks Received 
    69
    Thanked in
    20 Posts
    Mentioned
    2 Post(s)
    Humor
    Aggressive
    País
    France
    Tente usar uma função alternativa de cópia, como strncpy_s, para ver se o comportamento muda

    const char* tempStr = Section.Rows[i].GetStringPtr(2);size_t length = strlen(tempStr);

    strncpy_s(this->PatentStruct[this->_Count].NamePatente, sizeof(this->PatentStruct[this->_Count].NamePatente), tempStr, _TRUNCATE);

  8. The Following User Says Thank You to Ravoc For This Useful Post:


  9. #7
    Membro embreve's Avatar

    Data de Ingresso
    Mar 2023
    Posts
    94
    Thanks Thanks Given 
    156
    Thanks Thanks Received 
    9
    Thanked in
    8 Posts
    Mentioned
    4 Post(s)
    País
    Brazil
    Citação Originally Posted by Ravoc Ver Post
    Tente usar uma função alternativa de cópia, como strncpy_s, para ver se o comportamento muda

    const char* tempStr = Section.Rows[i].GetStringPtr(2);size_t length = strlen(tempStr);

    strncpy_s(this->PatentStruct[this->_Count].NamePatente, sizeof(this->PatentStruct[this->_Count].NamePatente), tempStr, _TRUNCATE);
    Obrigado, Ravoc. Irei testar.

  10. #8
    Developer C++ Romário's Avatar

    Data de Ingresso
    Jul 2022
    Posts
    72
    Thanks Thanks Given 
    39
    Thanks Thanks Received 
    367
    Thanked in
    33 Posts
    Mentioned
    6 Post(s)
    País
    Brazil
    Olá... Primeiro que essa função não é do C++, ela é de C e é uma alternativa segura a strcpy. Talvez se vc usar strcpy resolva o seu problema, mas existem outros métodos e funções melhores para fazer isso e evitar problemas de vazamento de memória.

  11. #9
    Membro embreve's Avatar

    Data de Ingresso
    Mar 2023
    Posts
    94
    Thanks Thanks Given 
    156
    Thanks Thanks Received 
    9
    Thanked in
    8 Posts
    Mentioned
    4 Post(s)
    País
    Brazil
    Citação Originally Posted by Romário Ver Post
    Olá... Primeiro que essa função não é do C++, ela é de C e é uma alternativa segura a strcpy. Talvez se vc usar strcpy resolva o seu problema, mas existem outros métodos e funções melhores para fazer isso e evitar problemas de vazamento de memória.
    Sim, é do C. Preciso passar três parâmetros para a função, no caso essa aceita apenas duas.
    Sabe me dizer quais seriam essas funções melhores para que eu possa corrigir o meu problema? Se possível hoje irei tentar resolver utilizando a ajuda do amigo, Ravoc.
    Obrigado pelo seu comentário.

    3 Horas 47 minutes:------- Atualizado -------

    Citação Originally Posted by Ravoc Ver Post
    Tente usar uma função alternativa de cópia, como strncpy_s, para ver se o comportamento muda

    const char* tempStr = Section.Rows[i].GetStringPtr(2);size_t length = strlen(tempStr);

    strncpy_s(this->PatentStruct[this->_Count].NamePatente, sizeof(this->PatentStruct[this->_Count].NamePatente), tempStr, _TRUNCATE);
    Infelizmente testei aqui, e continua com o mesmo comportamento.

    4 minutes:------- Atualizado -------

    Citação Originally Posted by Romário Ver Post
    Olá... Primeiro que essa função não é do C++, ela é de C e é uma alternativa segura a strcpy. Talvez se vc usar strcpy resolva o seu problema, mas existem outros métodos e funções melhores para fazer isso e evitar problemas de vazamento de memória.
    Utilizei a função strcpy e também não funcionou.
    Last edited by embreve; 11-18-2024 at 02:30 PM.

  12. #10
    Developer C++ Ravoc's Avatar


    Data de Ingresso
    Aug 2022
    Posts
    46
    Thanks Thanks Given 
    81
    Thanks Thanks Received 
    69
    Thanked in
    20 Posts
    Mentioned
    2 Post(s)
    Humor
    Aggressive
    País
    France
    Que estranho, faça o seguinte, me encaminhe o script aqui no tópico para analisarmos ele completamente, creio eu que você utilizando OGOCX LUA?

Page 1 of 2 12 ÚltimoÚltimo

Permissões de Postagem

  • Você não pode iniciar novos tópicos
  • You may not post Resposta(s)
  • Você não pode enviar anexos
  • Você não pode editar suas mensagens
  •