2013-09-06 18 views
10
#include <stdio.h> 
    #include <stdlib.h> 
    #include <string.h> 
    int main(int argc, char *argv[]){ 
     int fir; //badly named loop variable 
     char *input[] = calloc(strlen(argv), sizeof(char)); //initializing an array 
     for(fir = 1; fir< strlen(argv); fir++){ //removing the first element of argv 
      strcat(input, argv[fir]); // appending to input 
      } 

Błąd, który dostaję jest dla linii 6. mówi "przekazanie argumentu 1" strlen "z niezgodnego typu wskaźnika. Otrzymuję ten sam błąd dla Mówi też, że podano znak char **, ale oczekiwano znaku const * dla obu funkcji .. Próbuję wypełnić nową tablicę wszystkimi elementami argv z wyjątkiem pierwszego.Próbowałem argv = & argv [1] i to nie działa. robi się strlen() czy strcat() funkcji nie ma char tablic?Jak znaleźć długość argv [] w C

+0

Myślę, że chcesz do indeksu że 'argv []', ale nie wykraczają poza '[0 .. (argc-1]' Kiedy to zrobię – WhozCraig

Odpowiedz

19
int main(int argc, char *argv[]) 

argv jest szereg odnośników do char (to szereg strun). Długość tej tablicy jest przechowywana w argumencie argc.

strlen służy do uzyskania długości pojedynczego łańcucha, który musi być zakończony wartością NULL, w przeciwnym razie zachowanie jest niezdefiniowane.

+1

Myślę, że rozumiem Nie mogę użyć argv [], ponieważ nie jest to w rzeczywistości tablica znaków, tablica wskaźników do znaku "char"? jeśli zrobię kopię argv [x] i użyję go w strcat jak strcat (input, copyargv [x]) to zadziała? – user1787351

+0

argv [] to tablica ciągów znaków (tj. tablica wskaźników do wskaźników znakowych, gdzie każdy znak wskazuje na początek ciągu znaków); argc informuje, ile masz łańcuchy, strlen zwraca długość przekazanego łańcucha, więc może on y zostanie wywołany na char *, to znaczy char [], to jest na łańcuch): strlen (argv [i]), gdzie i jest między 0 a argc. – VeraKozya

0

argv jest tablicą char*. wielkość tej tablicy jest argc. należy zdać sobie element ten array do strlen.

0

Może chodziło zrobić coś takiego:

size_t argv_length(char** argv) 
{ 
    size_t ret = 0; 
    while(*(++argv)) 
     ret += strlen(*argv); 

    return ret; 
} 

?

0

argv pobiera arryas znaku *, ale musisz przekazać argc do strlen zamiast całej tablicy. Wtedy nie otrzymasz żadnego błędu na strcat.

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
int main(int argc, char *argv[]){ 
int fir; //badly named loop variable 
char *input[] = calloc(strlen(argc), sizeof(char)); //initializing an array 
for(fir = 1; fir< strlen(argv); fir++){ //removing the first element of argv 
strcat(input, argv[fir]); // appending to input 
} 
4

Nie wiem, dlaczego nikt nie zasugerował zmiany strlen, aby odnieść się do konkretnego wpisu w tablicy wskaźników do zwrócenia uwagi?

strlen(argv[0])  // also, 1, 2, up to (argc - 1) 

Również http://www.cdecl.org/ pomaga w upewnieniu się, że oświadczenie char *argv[] jest: declare argv as array of pointer to char

0

argv jest tablica char, strlen zajmuje tylko ciągi. Jeśli chcesz uzyskać długość każdego argumentu w argv (co starałem się zrobić), musisz iterować przez niego, uzyskując dostęp do elementów takich jak argv[i][j]. Korzystanie z argumentu argv[i][j] != '\0'. Jeśli chcesz tylko liczbę argumentów, użyj argc.

0
int count = 0; 
while(argv[++count] != NULL); 

Teraz licznik będzie miał długość argv

Powiązane problemy