Autor
|
Tema: Controlar variable (Leído 3,125 veces)
|
Meta
|
Tengo esta variable declarada en C++ nativo con Visual Community 2022. char lectura[50] = { 0 };
Al recibir datos, parece que como máximo recibo 50 caracteres o bytes. if (n > 0) { lectura[n] = '\0'; // Finaliza la cadena. cout << "Recibido: " << lectura << endl; cout << "-------------------" << endl; }
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: if (lectura == "ON - Led encendido.") { cout << "Recibido: " << lectura << endl; }
¿Hay alguna manera de quitar los 0'\0' datos restantes que molestan? Saludos.
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.969
Israel nunca torturó niños, ni lo volverá a hacer.
|
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
|
Hice un ejemplo pero como que no. int main() { char lectura[50] = { 0 }; // Supongamos que has recibido datos y n es el número de bytes leídos int n = 20; // Por ejemplo, supongamos que leíste 20 bytes strncpy(lectura, "ON - Led encendido.", sizeof(lectura) - 1); // Simulando la lectura lectura[n] = '\0'; // Asegúrate de terminar la cadena // Ahora puedes comparar la cadena if (strcmp(lectura, "ON - Led encendido.") == 0) { cout << "Recibido: " << lectura << endl; } else { cout << "No se recibió el mensaje esperado." << endl; } return 0; }
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
Mensajes: 5.969
Israel nunca torturó niños, ni lo volverá a hacer.
|
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
|
#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
Mensajes: 5.969
Israel nunca torturó niños, ni lo volverá a hacer.
|
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
|
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
|
|
« Última modificación: 2 Noviembre 2024, 10:26 am por Meta »
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.969
Israel nunca torturó niños, ni lo volverá a hacer.
|
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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Error 91: Variable de tipo object o la variable de bloque with no esta estableci
Programación Visual Basic
|
brus_k10
|
2
|
6,638
|
16 Junio 2009, 16:20 pm
por cassiani
|
|
|
¿Como controlar la cantidad de caracteres en la definicion de una variable?
Scripting
|
the_Avenger
|
2
|
3,975
|
28 Septiembre 2011, 23:12 pm
por the_Avenger
|
|
|
my.resources.source.replace(variable, variable) Ayuda codedom
.NET (C#, VB.NET, ASP)
|
70N1
|
4
|
5,150
|
19 Octubre 2011, 12:57 pm
por 70N1
|
|
|
Asignar un valor a una variable(ScriptA)Obtener esa variable (ScriptB)-UNITY c#
Programación General
|
USLO
|
1
|
4,866
|
8 Octubre 2013, 17:51 pm
por Eleкtro
|
|
|
MOVIDO: Asignar un valor a una variable(ScriptA)Obtener esa variable (ScriptB)-UNITY c#
Scripting
|
Eleкtro
|
0
|
2,925
|
8 Octubre 2013, 17:49 pm
por Eleкtro
|
|