Para una tarea, debo tener argumentos de línea de comando para mi programa C. He usado argc/argv antes (en C++) sin problemas, pero no estoy seguro de si las cadenas de estilo C afectan el funcionamiento. Aquí está el comienzo de mi principal:
int main(int argc, char *argv[]){
if(argc>1){
printf("0 is %s, 1 is %s\n",argv[0],argv[1]);
if(argv[1]=="-e"){
// Do some stuff with argv[2]
system("PAUSE");
}
else{
printf("Error: Incorrect usage - first argument must be -e");
return 0;
}
}
Así que estoy llamando a mi programa como “program.exe -e myargstuff” pero obtengo el resultado “Error: Uso incorrecto…”, aunque mi printf() me dice que argv[1] es “-e”. ¿Alguna ayuda, por favor? ¡Gracias!
@Joe: Pareces nuevo en StackOverflow; puede considerar marcar la casilla junto a la respuesta que crea que responde mejor a su pregunta.
– jgottula
20 de febrero de 2010 a las 2:27
La línea
if(argv[1]=="-e"){
compara punteros, no cadenas. Utilizar el strcmp función en su lugar:
if(strcmp(argv[1],"-e")==0){
Ja ja. 6 respuestas como la mía en el tiempo que me tomó escribir la respuesta.
– Brandon Bodnar
20 de febrero de 2010 a las 2:12
Bueno, eso lo hizo absolutamente. Gracias por corregir esto, ¡soy muy nuevo en C!
– José
20 de febrero de 2010 a las 2:12
Cambiar:
if(argv[1]=="-e"){
para
if(strcmp(argv[1], "-e") == 0){
e incluir string.h.
Verificar getopt() y funciones relacionadas; te hará la vida mucho más fácil.
No puedes comparar c-strings así. Utilice strcmp (referencia aquí).
Debido a que las cadenas c son en realidad punteros, el operador == compara la dirección del primer carácter que nunca será igual en este caso.
no puedes usar == para comparar cadenas como esa en C. Eso es solo comparar las direcciones de argv[1] y su literal, que están prácticamente garantizados para ser diferentes.
Utilizar strcmp en lugar de. p.ej:
if (!strcmp("-e", argv[1])) {
zneak
El prototipo de la función principal dice que estás tratando con char* punteros En C, no hay sobrecarga de operadores; por lo tanto, == entre dos char* probare si ellos apuntar al mismo lugar. Este no es el caso, y rara vez es el caso en absoluto. Utilizar el strcmp (la referencia de la función es válida aunque apunte a un sitio de C++) función de <string.h>:
strcmp(argv[1], "-e") == 0
¿Ha sido útil esta solución?
Tu feedback nos ayuda a saber si la solución es correcta y está funcionando. De esta manera podemos revisar y corregir el contenido.
Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos.
Configurar y más información
@Joe: Pareces nuevo en StackOverflow; puede considerar marcar la casilla junto a la respuesta que crea que responde mejor a su pregunta.
– jgottula
20 de febrero de 2010 a las 2:27