elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Controlar variable
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Controlar variable  (Leído 3,125 veces)
Meta


Desconectado Desconectado

Mensajes: 3.501



Ver Perfil WWW
Controlar variable
« en: 31 Octubre 2024, 18:15 pm »

Tengo esta variable declarada en C++ nativo con Visual Community 2022.

Código
  1. char lectura[50] = { 0 };

Al recibir datos, parece que como máximo recibo 50 caracteres o bytes.

Código
  1.        if (n > 0)
  2.        {
  3.            lectura[n] = '\0'; // Finaliza la cadena.
  4.  
  5.            cout << "Recibido: " << lectura << endl;
  6.            cout << "-------------------" << endl;
  7.        }

El dato que recibo por ejemplo debe ser exactamente esto:

ON - Led encendido.

Si miro la variable en el IDE, me muestra esto:


Ver zoom.

Al recibir esos datos quiero hacer algo como esto:
Código
  1.            if (lectura == "ON - Led encendido.")
  2.            {
  3.                cout << "Recibido: " << lectura << endl;
  4.            }

¿Hay alguna manera de quitar los 0'\0' datos restantes que molestan?

Saludos.


En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.969


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Controlar variable
« Respuesta #1 en: 31 Octubre 2024, 18:47 pm »

No molestan, el problema no es ese, las cadenas de caracteres no se comparan de esa manera. Se usan funciones como strcmp (y derivados); tambien podes usar std::string de la STL.


En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Meta


Desconectado Desconectado

Mensajes: 3.501



Ver Perfil WWW
Re: Controlar variable
« Respuesta #2 en: 1 Noviembre 2024, 11:39 am »

Hice un ejemplo pero como que no.

Código
  1. int main()
  2. {
  3.    char lectura[50] = { 0 };
  4.    // Supongamos que has recibido datos y n es el número de bytes leídos
  5.    int n = 20; // Por ejemplo, supongamos que leíste 20 bytes
  6.    strncpy(lectura, "ON - Led encendido.", sizeof(lectura) - 1); // Simulando la lectura
  7.    lectura[n] = '\0'; // Asegúrate de terminar la cadena
  8.  
  9.    // Ahora puedes comparar la cadena
  10.    if (strcmp(lectura, "ON - Led encendido.") == 0) {
  11.        cout << "Recibido: " << lectura << endl;
  12.    }
  13.    else {
  14.        cout << "No se recibió el mensaje esperado." << endl;
  15.    }
  16.  
  17.    return 0;
  18. }

Gravedad   Código   Descripción   Proyecto   Archivo   Línea   Estado suprimido   Detalles
Error   C4996   'strncpy': This function or variable may be unsafe. Consider using strncpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.   Datos de entrada puerto serie CPP nativo Consola 01   D:\Visual Studio 2022\Datos de entrada puerto serie CPP nativo Consola 01\Datos de entrada puerto serie CPP nativo Consola 01\Datos de entrada puerto serie CPP nativo Consola 01.cpp   51      
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.969


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Controlar variable
« Respuesta #3 en: 1 Noviembre 2024, 12:11 pm »

El error es claro, tenes dos opciones, o definis _CRT_SECURE_NO_WARNINGS o usas strncpy_s, no tiene mucho que ver con el problema original.
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Meta


Desconectado Desconectado

Mensajes: 3.501



Ver Perfil WWW
Re: Controlar variable
« Respuesta #4 en: 1 Noviembre 2024, 23:50 pm »

#include <stdio.h>
#include <string.h>

Si te refieres a esto, lo he puesto y sigue igual.
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.969


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Controlar variable
« Respuesta #5 en: 2 Noviembre 2024, 08:39 am »

Por supuesto que no ... ¿En el error o en mi mensaje donde dice algo de stdio.h o string.h?

Tenes que acostumbrarte a leer la salida del compilador:
Error   C4996   'strncpy': This function or variable may be unsafe. Consider using strncpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS.
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Meta


Desconectado Desconectado

Mensajes: 3.501



Ver Perfil WWW
Re: Controlar variable
« Respuesta #6 en: 2 Noviembre 2024, 10:24 am »

Viendo este enlace.

https://learn.microsoft.com/es-es/cpp/error-messages/compiler-warnings/compiler-warning-level-3-c4996?view=msvc-170&f1url=%3FappId%3DDev17IDEF1%26l%3DES-ES%26k%3Dk(C4996)%26rd%3Dtrue

cambiar de strncpy a este strncpy_s.

Solo tenías que haberlo dicho así tal cual.  ;-) ;-) ;-) ;-)

Aún así, muchas gracias, ahora compila.

1. Uso de
strncpy_s
: Esta función toma como argumentos el destino, el tamaño del destino, la cadena de origen y un valor que indica cómo manejar el truncamiento. Usar
_TRUNCATE
asegura que la cadena se trunque si es demasiado larga.

2. Terminación de la cadena: La línea
lectura[n] = '\0';
puede no ser necesaria si
strncpy_s
ya se encarga de ello, pero si
n
es menor que la longitud de la cadena copiada, asegúrate de que la cadena esté correctamente terminada.

3. Incluir
: Asegúrate de incluir la cabecera
para poder usar
cout
.

Si prefieres desactivar la advertencia en lugar de cambiar el código, puedes agregar
#define _CRT_SECURE_NO_WARNINGS
al inicio de tu archivo, pero no es la mejor práctica, ya que podrías perder las ventajas

 :D
« Última modificación: 2 Noviembre 2024, 10:26 am por Meta » En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.969


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Controlar variable
« Respuesta #7 en: 2 Noviembre 2024, 10:48 am »

Solo tenías que haberlo dicho así tal cual.  ;-) ;-) ;-) ;-)

El error es claro, tenes dos opciones, o definis _CRT_SECURE_NO_WARNINGS o usas strncpy_s, no tiene mucho que ver con el problema original.
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Meta


Desconectado Desconectado

Mensajes: 3.501



Ver Perfil WWW
Re: Controlar variable
« Respuesta #8 en: 2 Noviembre 2024, 11:18 am »

Vaya, estoy cegato, culpa mia.   :o :o :o :o
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines