es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Demasiados argumentos en la función.

Estoy escribiendo un programa que verifica quién es el usuario, si es el usuario correcto que ha iniciado sesión, subirá datos a mi servidor FTP. Encripta los datos usando tar y luego openssl. Creo que esa parte es correcta, sin embargo, al pasar comandos del sistema al terminal, tengo un problema con strcpy. Sigo obteniendo un error que dice “hay demasiados argumentos para la función strcpy. Específicamente donde dice “strcpy(encrypt, “tar -cf /home/%s”, p);” creo que es porque le estoy pasando la variable p. ¿Alguien podría ayudarme? Gracias.

int main(int argc, char *argv[])
{
  // verifica quién es el usuario
  char *p=getenv("USER");
  if (p=NULL) return EXIT_FAILURE;
  printf("El usuario es %s\n", p);
  char *usr;
  char *encrypt;
  char *upload;

  // encripta la carpeta usando tar, luego openssl AES 256 bit

  strcpy(encrypt, "tar -cf /home/%s", p);
  system(encrypt);
  strcpy(encrypt, "openssl enc -aes-256-cbc -in FILE.NAME -out file.enc");
  system(encrypt);

  // sube datos al servidor FTP usando curl
  strcpy(upload, "curl -T /PATH/ SERVER_ADDRESS");
  system(upload);

  return 0;
}
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en c, punteros, manejo de errores, FTP y strcpy, hay algunos problemas que deben abordarse en el código proporcionado:

    1. En primer lugar, las variables usr, encrypt y upload no están inicializadas. Esto significa que no tienen memoria asignada, lo que lleva a un comportamiento indefinido cuando se utilizan. Para solucionar este problema, se debe asignar memoria a estas variables. Por ejemplo:
    char usr[255];
    char encrypt[255];
    char upload[255];
    
    1. En segundo lugar, la función strcpy() no se está utilizando correctamente. La función strcpy() se utiliza para copiar una cadena desde un array fuente a un array de destino, pero en el código proporcionado se está utilizando para formatear una cadena con marcadores de posición al estilo printf(). Esta es una utilización incorrecta. Para solucionar esto, en su lugar debería utilizarse la función sprintf(). Por ejemplo:
    sprintf(encrypt, "tar -cf /home/%s", p);
    
    1. Por último, hay un error tipográfico en el código. La línea if (p=NULL) return EXIT_FAILURE; debería ser if (p==NULL) return EXIT_FAILURE;. El signo igual (=) es un operador de asignación, mientras que el signo igual doble (==) es el operador de igualdad. La operación prevista es una comparación, no una asignación.

    Una vez que se resuelvan estos problemas, el código funcionará como se pretende.

Comments are closed.