copiar caracteres uno a uno

Iniciado por bash, 23 Mayo 2015, 04:53 AM

0 Miembros y 1 Visitante están viendo este tema.

bash

Buenas a todos !!

tengo una duda , tengo un par de horas tratando de hacer algo con un string es quiero copiar caracter a caracter usando varoas funciones pero nada de funcionar le pondre lo que he hecho.
Código (cpp) [Seleccionar]



#include<cstdlib>
#include<cstring>
#include<iostream>

using namespace std;

void copiar(){
   char *szBuffer1 = "mi cadena es esta ";
   char *szCopia;
  char  caracterAcaracter[30];
   
   ///la plataforma en la que lo uso no tiene malloc
  memset(szCopia, 0x00, strlen(szBuffer1));


    for(int i = strlen(szBuffer1)); i < -1 ; i--)
      {

       caracterAcaracter[i] = szBuffer[1];
      strcat(szCopia, szBuffer1[i]);
     strcpy(szCopia, szBuffer1[i]); ///igual pasa con los que piden n caracateres para cpiar
                                                   /// no me deja por que el segundo argumento pide const char *
                                                   ///strtok no se bien si alguien me aconseja si me conviene                                               
}





}











podrian darme algun consejo o decirme donde podria leer mas sobre lo string y caracteres , gracias y discuplen la molestia .
gracias por responder mis dudas

Stakewinner00

Sobra un paréntesis en el for, la variable szBuffer no existe... Como quieres que funcione si ni compila?

bash

#2
fue un error digintandolo aqui , ayer tenia sueno, lol , pero de todos modos cuando trato de usar strcpy o strcat me da u error ya que el dato no es constante ,y uso el indice para copiar el programa estalla !!

tambien estoy  he intentando esto:
Código (cpp) [Seleccionar]

#include<cstring>
#include<iostream>
#include<stdlib.h>
#include<ctime>
using namespace std;


int main(){
   
 char *szBuffer ={"est buffer es enorme y solo quiero<aqui> cargar una parte del "};
   int inlen = 0;
   while(strstr(szBuffer, "<aqui>")!=NULL){
     inlen++;
  }


  char *szif;
 
  for(int i = 0 ; i < inlen; i++ )
  {
      memset(szif, szBuffer[i], inlen);
     cout << szif[i]<<endl ;
   }  


}





y tambien intente este

Código (cpp) [Seleccionar]
#include<cstring>
#include<iostream>
#include<stdlib.h>
#include<ctime>
using namespace std;


int main(){
   
 char *szBuffer ={"est buffer es enorme y solo quiero<aqui> cargar una parte del "};
   int inlen = 0;
 char *xc = strtok(szBuffer, " ");
   while(strtok(xc, " ")!=NULL){
     inlen++;
  }


  char *szif;
 
  for(int i = 0 ; i < inlen; i++ )
  {
      memset(szif, szBuffer[i], inlen);
     cout << szif[i]<<endl ;
   }  


}



Código (cpp) [Seleccionar]
/* strtok example */
#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;
int main ()
{
  char str[] ="- caracter de ejemplo buscado espacios.";
  char *szBuffer;
  memset(szBuffer, 0x0, 2000 );
  char *pch = strtok(str, " ");
  while(pch != NULL)
  {
    strcat(szBuffer, pch);
    strcat(szBuffer, "\n");
    pch= strtok(NULL, " ");
    cout <<szBuffer <<endl;
   
  }
  return 0;
}


como podria usar memset en puntero de dos dimensiones !!
y me da core dmped

y que inclui ctime lo pueden obviar por favor :)


y como dije anteriormente strcpy , strncpy, strcat , strncat solo aceptan el segundo argumento const  char * y la verdad seguire intentandolo ,gracias

gracias
gracias por responder mis dudas

Peregring-lk

#3
Vamos a ver:

Código (cpp) [Seleccionar]

#include <cstring>
#include <iostream>
#include <stdlib.h>
#include <ctime>

using namespace std;

void copiar() {
  char const *szBuffer1 = "mi cadena es esta"; // No necesitas un espacio al final. Ya hay un \0 implícito.
  char *szCopia;
  char  caracterAcaracter[30];

  // la plataforma en la que lo uso no tiene malloc.
  memset(szCopia, 0x00, strlen(szBuffer1));

  strcpy(szCopia, szBuffer1);
  strcpy(caracterAcaracter, szBuffer1);
}


Ésto debería funcionarte. La función `strcpy` recorre la segunda cadena carácter a carácter, hasta que encuentra un '\0', y la va copiando en la primera.

Lo que me gustaría saber es para qué quieres la variable `szCopia` si después no la devuelves. Por otro lado, si trabajas con C++, podrías hacer sencillamente:

Código (cpp) [Seleccionar]

void copiar()
{
    char const* szBuffer1 = "mi cadena es esta";
    string copia1(szBuffer1);
    string copia2(szBuffer1);
}


bash

#4
tienes razon con c++ podria ser mas facil , pero tengo que usar c y estoy limitado ne recurso por eso quiero saber si alguien me da un pequeno tip , he intentado pero todo  ha sido en vano , no pongo todo el codigo pero creeme  todo esos bufferes tienen motivo de estar ahi , quiero parsear un xml y solo quiero obtener una subcadena o quiero "chop" y solo sacar una parte por que a donde la voy a pasar (dispositivo empotrado ) tiene poca memoria y quiero recortar a ver si pueder reducir el tamano , lo digo para dar mas info de lo que quiero hacer.

ahora estoy pensando cortar palabra por palabra , me recomienda usar strtok  con un puntero de dos dimensiones ? tengo el tamano maximo de caracteres que quiero capturar "


por cierto strcpy () es strcpy(char * c, const char * dd);
el compilador me da un error cuando trato de compilar con una buffer o char * no constante , es lo mismo con strcat y derivados de ellos .

Gracias
gracias por responder mis dudas

Stakewinner00

y porque el char* de origen no puede ser constante?

Peregring-lk

Perdón, perdón. Fallo mío. Los literales de cadena ("cadena"), tiene tipo `const char*` por defecto. Me equivoqué escribiendo aquí (ya está corregido).

Y si estás programando en C, programa en C y no incluyas cabeceras de C++, etc:


#include <string.h>
   
void copiar() {
   char const *szBuffer1 = "mi cadena es esta"; // No necesitas un espacio al final. Ya hay un \0 implícito.
   char *szCopia;
   char  caracterAcaracter[30];
   
   // la plataforma en la que lo uso no tiene malloc.
   memset(szCopia, 0x00, strlen(szBuffer1));
   
   strcpy(szCopia, szBuffer1);
   strcpy(caracterAcaracter, szBuffer1);
}

bash

#7
Bueno es c y un c++ recortado !! jajajaja

gracias ,  aunque lo que quiero es por ejemplo   

strcpy(caracterAcaracter, szBuffer1[1]); por ejemplo jajajja si es dificil
gracias por responder mis dudas

bash

estaba viendo de un tema pasado sobre caracteres y cadena en c


estoy probando algo de c++ aunque no me han aprobado en el trabajo para hablar ahora por que el programa estalla ?
Código (cpp) [Seleccionar]
//this is cpu intesive function
char *szDropToken(char * szBufferCompleto){

  string szBuffer[2000];
      int len= strlen(szBufferCompleto);
      int inlen = 0;
      char *szRet;


     
      while( len >inlen  )
      {
      char *pch =strtok( szBufferCompleto , " ");
      while(NULL, " "){
      pch =  strtok(NULL, " ");
      szBuffer[len] = pch;

      if(strstr(szBuffer[inlen].c_str(), "<ArhivoTransacciones>") == NULL )
      {
      inlen++;
     
      continue;
      }else break;

      }

      for(int i; i < inlen ; i++)
      {

              strcat(szRet, szBuffer[i].c_str());

      }
   retunr szRet;
      }


aun explota el programa
gracias por responder mis dudas

Eternal Idol

Estan trabajando con punteros indefinidos:
char *szRet;
char *szCopia;

Hay que asignarle un valor llamando a malloc o a new.
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