Tengo un array de cadenas como tales

char *T[] = {"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111"};

Cuando hago algo como esto, sin embargo, donde cada cadena es un array de caracteres sin signo

unsigned char *T[] = {"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111"};

Me sale el error «error al Inicializar ‘unsigned char *’ con una expresión de tipo ‘char[5]’ convierte entre los punteros a tipos enteros con signo diferente.» Supongo que significa que algunas de las representaciones de «0» y «1» que se están acostumbrando están firmados, pero no estoy seguro de por qué/cómo lidiar con eso. Me gustaría tener una matriz de cadenas, donde cada cadena es un array de caracteres sin signo en lugar de firmado chars. Alguien puede ayudarme con eso?

Nota: este es un problema de HW, pero no es el real problema, y es sólo un menor paso en una de las muchas posibles soluciones. Sin embargo, sería bueno si usted me podría ayudar a entender que sin darme una respuesta explícita. Gracias.

  • Para decirlo simplemente, los literales de cadena son de tipo char* no unsigned char*.
  • debe utilizar con el bastidor
  • Recomiendo fuertemente en contra de fundición para romper la seguridad de tipos.
  • a continuación, una serie de sindicatos de char + unsigned char funciona bien, porque cada uno será de 1 byte para peso no será un problema. El Aliasing?
  • Existe una necesidad de hacer que los caracteres sin signo? ¿Qué tipo de comparaciones iba a realizar con ellos?
  • No hay ningún bit a bit de comprobación de igualdad operador en C y C++.
  • Mysticial es la correcta en los literales de cadena ser const char*. Creo que usted está tratando de hacer la conversión por una razón equivocada; podría usted describir el problema más general que va a resolver?
  • No, esto es C, donde los literales de cadena tipo char[N], no const. (Sin embargo, si se intenta modificar un literal de cadena es un comportamiento indefinido.)
  • Qué compilador ?

InformationsquelleAutor mlstudent | 2012-09-15

1 Comentario

  1. 2

    Las cadenas de C, una de las muchas maneras en que uno podría representar una cadena, constan de las matrices de char terminada por un punto char que tiene la null valor. Que es lo que se obtiene tipo de sabio cuando tienes «0000» en el código.

    Lo que quieres es asignar «0000» a un array de unsigned char terminada por un punto unsigned char que tiene el valor null. Teniendo en cuenta lo que están empezando, se le tiene que echar, o tal vez de representar sus datos en una forma que no requiere de fundición.

    El principal problema que veo con este enfoque es que elimina la mayoría de la ventaja de tener un estilo de C de la cadena en el primer lugar. Con un unsigned char «cadena», usted no tiene ninguno de los estándar de la cadena de librerías a su disposición, por lo que se tiene que convertir de nuevo a signed char tipos de cadena si desea utilizar printf, o cualquier otra cadena orientada a la función.

    Realmente, sólo utiliza dos valores para cada uno de los caracteres posibles de la posición «0» y «1». A menos que exista una razón de peso para hacerlo en una cadena, considerar un conjunto de valores booleanos para reducir la probabilidad de que una cadena como «0hello» el trabajo es la manera en el código, o mejor aún si que se han introducido a los campos de bits, el uso de los bits dentro de un unsigned char como los campos de bits (descartando ningún concepto que usted está tratando con cadenas).

    Las ventajas de la última técnica incluyen el uso de menos memoria y la incapacidad para el valor de a distinto de 0 o 1; sin embargo, usted tendrá que escribir una pequeña colección de rutinas para traducir los paquetes de bits en algo legible.

Dejar respuesta

Please enter your comment!
Please enter your name here