Título: [ANSI C] Split(), strlen(), mid(), Instr(), strcpy(). Publicado por: BlackZeroX en 12 Enero 2011, 22:55 pm .
Esta es la version de split() ya esta corregida debugeada y sirve en todo caso. Quien no sepa usar Vectores en C esta muerto ( ** ), es decir Puntero a Puntero. Corregido por segunda vez: Código
Nota.: Si alguien ve algun fallo por favor de no golpearme gracias!¡. Temibles Lunas!¡. Título: Re: [ANSI C] Split(), strlen(), mid(), Instr() Publicado por: Littlehorse en 12 Enero 2011, 23:44 pm El propósito de los comentarios es aclarar el código y no lo contrario. Si quieres poner créditos los puedes agregar al principio, pero poner spam en los comienzos de cada función sinceramente invitan a no seguir leyendo el código.
Por otro lado, el tipo de dato bool no existe en C, solo en C++, y viendo que estas utilizando las cabeceras de C, deberías definir el tipo de dato bool por tu cuenta. No he leido el resto del código; utilizar typedefs ayuda a que el código sea mas comprensible a primera vista. Saludos Título: Re: [ANSI C] Split(), strlen(), mid(), Instr(), strcpy(). Publicado por: leogtz en 13 Enero 2011, 01:28 am Siempre retornas 1 en el main() eso es incorrecto, para el sistema operativo tu programa no funciona bien.
Código
Título: Re: [ANSI C] Split(), strlen(), mid(), Instr(), strcpy(). Publicado por: BlackZeroX en 13 Enero 2011, 01:43 am .
Les agradezco sus comentarios pero acabo de ver un error, y ahorita solo me intriga que me salte este error. Código
Código: Heap block at 003E1750 modified at 003E175E past requested size of 6 Nota: seguire viendo por que me salta... Dulces Lunas!¡. Título: Re: [ANSI C] Split(), strlen(), mid(), Instr(), strcpy(). Publicado por: Psyke1 en 13 Enero 2011, 02:09 am Hola Black! :D
Parece que te estás pasando ya a Cpp eh? ;) Me gusta tu función Instr(), me recuerda a la que hice yo hace días en vb6 :silbar: : Código
Código http://goo.gl/Pv2Be :xD Un día de estos que no estés ocupado te tengo que preguntar dudas por msn... :P DoEvents! :P Título: Re: [ANSI C] Split(), strlen(), mid(), Instr(), strcpy(). Publicado por: BlackZeroX en 13 Enero 2011, 02:12 am .
Ya corregi el error el problema era con la funcion mid(), TODO ya funciona como deberia de ser. @ Leo Gutiérrez. Puse la comparacion con el caracter nulo solo para tener la menor cantidad de advertencias de mi IDE/Compilador. P.D.: Si Rana es el mismo solo que lo tube que traducir, fue la que mas me gusto. Dulces Lunas!¡. Título: Re: [ANSI C] Split(), strlen(), mid(), Instr(), strcpy(). Publicado por: 08l00D en 13 Enero 2011, 15:49 pm Por otro lado, el tipo de dato bool no existe en C, solo en C++ En realidad si existe en C.. se implemento a partir del estandar C99..Saludos se puede utilizar como _Bool ... o bool (incluyendo <stdbool>, donde esta definido) aunque igual siempre es mejor definirlo para no joder la compatibilidad con compiladores viejos.. Código Por lo demas no lo vi en detalle ... pero vi que los punteros devueltos por malloc los comparas por 0 .. lo cual en teoria no esta mal ya que el compilador se da cuenta que el 0 esta siendo utilizada en un contexto de puntero y hace la conversion a NULL implicitamente.. pero no es una buena practica en C... utiliza siempre NULL.. al igual que cuando inicialices tus punteros... ah y otra cosa cuando tenes una expresion como *cadena++ los parentesis no son necesarios ... el operador ++ tiene mayor precedencia que el de desreferencia... Saludos Título: Re: [ANSI C] Split(), strlen(), mid(), Instr(), strcpy(). Publicado por: Littlehorse en 13 Enero 2011, 20:29 pm Citar En realidad si existe en C No, en C++ bool es un tipo de dato primitivo aparte. En C, desde C99 como bien decís, se define mediante macros en stdbool.h, pero es al día de hoy que se sigue definiendo aparte no solo por retrocompatibilidad, también por claridad de código.Citar pero no es una buena practica en C... utiliza siempre NULL.. al igual que cuando inicialices tus punteros... No esta establecido que sea una mala practica no utilizar NULL. Es simplemente una cuestión de estilo que se suele aplicar mas que nada en código critico donde se requiera dejar bien en claro que se esta tratando con punteros, pero no mas que eso. Citar an integer constant expression with the value 0, or such an expression cast to type void *, is called a null pointer constant. If a null pointer constant is converted to a pointer type, the resulting pointer, called a null pointer, is guaranteed to compare unequal to a pointer to any object or function. Personalmente me molesta bastante leer NULL por todos lados cuando esta mas que claro que se trata de punteros. Si se necesita dejar en claro que es un puntero no me parece mal, pero tampoco exagerar. En C++ directamente es lo contrario, el mismo creador recomienda utilizar 0 en lugar de NULL. Saludos Título: Re: [ANSI C] Split(), strlen(), mid(), Instr(), strcpy(). Publicado por: BlackZeroX en 13 Enero 2011, 20:59 pm Código
Muchas gracias por "tu corrección", pero por otro lado la funcion y objetivo es colo contar caracteres sin el char NULL por ende esta correcto Código
En strcpy() gracias me hiciste ver un error de hecho, y de hecho ni hiba a poner la igualdad a '\0' ( ya que se obvia ) pero como dije arriba solo puse dichas comparaciones para evitar la mayor cantidad de Advertencias que me tiraba mi IDE/Compilador. Gracias por lo de NULL, solo una duda mas si pongo (char*)0 tambien vale?, en mi forma de pensar es correcto pero desearia ver que piensan otros ya que no me deseo encerrar! en una conjetura¡. P.D.: El objetivo de estos codigos para mi es mejorar la comprension, sintaxis ( a tal grado de que ya no use tanto la web tal y como lo hago ya con vb6 q ya puedo hacer codigo de forma fluida usando las APIS del sistema. ), y evitar horrores de sintasys y demás cosas, ¿no voy tan perdido vdd? xP. Dulces Lunas!¡. . Título: Re: [ANSI C] Split(), strlen(), mid(), Instr(), strcpy(). Publicado por: Littlehorse en 14 Enero 2011, 00:20 am Citar Gracias por lo de NULL, solo una duda mas si pongo (char*)0 tambien vale?, en mi forma de pensar es correcto pero desearia ver que piensan otros ya que no me deseo encerrar! en una conjetura¡. Dependiendo del caso legal es, pero correcto no. Utiliza NULL en casos donde sea importante que el programador detecte a primera vista que se esta tratando de un puntero, para los otros casos puedes usar 0 perfectamente.En el caso de C++, con 0 basta y sobra. Código
Saludos Título: Re: [ANSI C] Split(), strlen(), mid(), Instr(), strcpy(). Publicado por: 08l00D en 14 Enero 2011, 01:03 am No, en C++ bool es un tipo de dato primitivo aparte. En C, desde C99 como bien decís, se define mediante macros en stdbool.h, pero es al día de hoy que se sigue definiendo aparte no solo por retrocompatibilidad, también por claridad de código. _Bool como puse arriba es una palabra reservada por tanto nuevo tipo... y te podes dar cuenta por 2 cosas no se necesita incluir ningun archivo de cabecera (que tenga un typedef, definicion de constante, enumeracion, etc) para poder declarar variables con _Bool y la otra es que las palabras reservadas(luego del estandar) suelen llevar como primer caracter el guion bajo.. al igual que _Complex _Imaginary .. tambien introducidos en C99... bool en stdbool.h si es una macro... no dije que no lo fuera No esta establecido que sea una mala practica no utilizar NULL. Es simplemente una cuestión de estilo que se suele aplicar mas que nada en código critico donde se requiera dejar bien en claro que se esta tratando con punteros, pero no mas que eso. Si tenes razon, lo dije sin ser demasiado objetivo... en lo personal no me gusta dejar al compilador que haga ese tipo de conversiones (de constantes a punteros) por que hay situaciones en donde el compilador no es capaz de realizar la conversion...Saludos por ejemplo.. en el paso de un argumento a una funcion que espera un puntero, si la funcion no tiene prototipo el cual no es obligatorio en C, se le esta pasando un int ... en vez de (void *)(0) ... ademas para mi le da mas legibilidad al codigo...es lo mismo que lo de true o false.. gustos personales Título: Re: [ANSI C] Split(), strlen(), mid(), Instr(), strcpy(). Publicado por: Littlehorse en 14 Enero 2011, 02:35 am Citar _Bool como puse arriba es una palabra reservada por tanto nuevo tipo... y te podes dar cuenta por 2 cosas no se necesita incluir ningun archivo de cabecera (que tenga un typedef, definicion de constante, enumeracion, etc) para poder declarar variables con _Bool Que sea una palabra reservada no implica que sea un nuevo tipo, "for" es una palabra reservada y hasta donde se no es un tipo de dato ;D. En todo caso si es como decís, realmente dudo mucho que no haya un typedef, pero ya mirare cuando haya tiempo. Igualmente por ahora te tomo la palabra ya que para comprobarlo tendría que instalar GCC y no puedo en este momento. En Vs el soporte a C99 es menor y en C++ _Bool no es mas que un typedef de bool. Citar en lo personal no me gusta dejar al compilador que haga ese tipo de conversiones (de constantes a punteros) por que hay situaciones en donde el compilador no es capaz de realizar la conversion... Intenta buscar 3 ejemplos en el que el compilador no sea capaz de realizar la conversión de 0 a NULL y veras que en ninguno el problema radica exclusivamente en utilizar o no utilizar NULL. Un ejemplo claro es el que expones: Citar en el paso de un argumento a una funcion que espera un puntero, si la funcion no tiene prototipo el cual no es obligatorio en C, se le esta pasando un int ... en vez de (void *)(0) ... Si no tenes un prototipo de función declarado partís de un error inicial. Usar o no usar NULL es secundario ya que ese no es exclusivamente el problema, el problema radica en la traba que le pones al compilador. Código
Y este es solo uno de mil ejemplos que no tienen nada que ver con usar o no usar NULL. Saludos! |