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;
}
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:
usr
,encrypt
yupload
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:strcpy()
no se está utilizando correctamente. La funciónstrcpy()
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 estiloprintf()
. Esta es una utilización incorrecta. Para solucionar esto, en su lugar debería utilizarse la funciónsprintf()
. Por ejemplo:if (p=NULL) return EXIT_FAILURE;
debería serif (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.