[Ansi C] command line arguments geven toch char terug ?

Pagina: 1
Acties:

  • Ti_Uhl
  • Registratie: Mei 2003
  • Laatst online: 19-09-2012
Ik ben een programmatje aan het maken in C dat teksfiles moet vergelijken. Alles werkt zoals het moet volgens de specificaties die ik wil maar ik zit met een foutje.

strcat verwacht 2 char array en concateneert ze samen, maar argv geeft blijkbaar geen char[] terug, ik heb al op google gezocht maar ik kan de fout precies niet goed vinden. Ik heb ook al geprobeert om eerst de argv's naar een variable te copieren maar dit werkt ook niet precies. Ik krijg altijd de error dat het niet de juiste data types zijn, en ik weet niet goed welke cast ik moet doen.

Mag ik je er wel op wijzen dat dit mijn eerste C prog is en dat de code dus nogal dirty is :)


C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
int main(int argc, char **argv) {
        
        char currentFile[100];
        
        if (argc < 4 ) {
          printf("gebruik : dactylo [orgineel bestand] [verbeterdir] [outputbestand] \n");
          return(0);
        } else {
                
                
                printf("0: %s\n1: %s\n2: %s\n3: %s\n",argv[0],argv[1],argv[2],argv[3]);
            dir_p = opendir(argv[2]);
                while( 0 != (dir_entry_p = readdir(dir_p))) {
                        
                        if ( ( strcmp(dir_entry_p->d_name,".") !=0 ) && ( strcmp(dir_entry_p->d_name,"..") != 0 ) ) {
                                currentFile = strcat(argv[2],dir_entry_p->d_name);
                                printf("%s\n",currentFile);
                                startControle(currentFile,argv[1],"out.txt",argv[3]);
                        }
                }
        }

    /* Tidy up.*/
        closedir(dir_p);

        
        
        // TODO : Add code to cylce tru a directory and correct al the files !!!!
    //startControle("domenique.txt","org.txt","out.txt","resultaten.txt");
    //startControle("dimi.txt","org.txt","out.txt","resultaten.txt");
    return (0);
}


Hij geeft dus volgende error bij lijn 16 :
main.c: In function `main':
main.c:48: error: incompatible types in assignment
main.c:52: error: incompatible types in assignment

Maar ik weet niet hoe ik die argumenten moet casten naar het juiste type :)

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 06-05 18:51

Creepy

Tactical Espionage Splatterer

een char[] is iets anders dan een *char ;)
strcat geeft een *char (pointer naar een char) terug, terwijl jij het toekent aan een char[] (array van char's). Daarnaast hoef je het result van strcat niet op te vangen aangezien de de eerste string wordt aangepast.

Ik denk dat je eens goed moet nazoeken hoe de str... functies werken. strcat plakt twee *chars aan elkaar en zet het resultaat neer in de eerste *char die je meegeeft (argv[2] in jou geval). Die eerste *char moet zoiezo lang genoeg zijn om de tweede string erbij te kunnen plakken.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 19:18

Robtimus

me Robtimus no like you

C:
1
2
strcpy(currentFile, argv[2]);
strcat(currentFile, dir_entry_p->name);
Plus de checks op errors bij beide, en checks op lengte. Wat als argv[2] + dir_entry_p->name langer zijn dan 99 karakters (plus de terminating \0)?

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 07-05 10:04
Ik zou iig kijken naar de strncpy en strncat functies, dan kun je die nare buffer overflows iig voorkomen.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.