2017-03-12 3 views
0

eine kurze Frage. Ich versuche, eine Funktion zu schreiben, die den Namen einer Zeichenfolge erhält und das zweite Zeichen ausgibt, aber es wird nicht kompiliert (unter http://ideone.com), können Sie das Problem beheben? Ich sehe das Problem nicht, da ich eine Adresse in die Funktion sende und um den Zugriff auf das Zeichen in dieser Adresse ersuche.C mit einem Zeiger auf eine Zeichenfolge in einer Funktion

#include <stdio.h> 

int main(void) { 
    char line[4] = "abc"; 
    test(line); 
    return 0; 
} 

void test(int point) { 
    point++; 
    printf("%c",*point); 
    return; 
} 

Der Compiler-Fehler, die ich erhalte ist -

Compilation error time: 0 memory: 10320 signal:0 
prog.c: In function ‘main’: 
prog.c:5:2: warning: implicit declaration of function ‘test’ [-Wimplicit-function-declaration] 
    test(line); 
    ^~~~ 
prog.c: At top level: 
prog.c:9:6: warning: conflicting types for ‘test’ 
void test(int point) { 
     ^~~~ 
prog.c:5:2: note: previous implicit declaration of ‘test’ was here 
    test(line); 
    ^~~~ 
prog.c: In function ‘test’: 
prog.c:11:14: error: invalid type argument of unary ‘*’ (have ‘int’) 
    printf("%c",*point); 
       ^~~~~~ 
+2

Warum verwenden Sie 'int' anstelle von' char * '? Auch "int" kann nicht dereferenziert werden. – BLUEPIXY

+1

Sollte 'test (char * point)' sein – smttsp

+1

Wenn Sie tatsächlich die Wörter in der Fehlermeldung lesen, sind sie ziemlich spezifisch. Sie ** müssen ** sie jedoch tatsächlich lesen. Sie sind nicht nur da, um Platz auf dem Bildschirm zu nehmen; Sie vermitteln Informationen. –

Antwort

4

Zwei hier Probleme.

Zuerst verwenden Sie die Funktion test, bevor es deklariert wird. Daher wird die Funktion implizit so deklariert, dass sie eine nicht spezifizierte Anzahl von Argumenten nimmt und int, d. H. int test(), zurückgibt. Dieser Konflikt mit der Definition void test(int point), die später erscheint.

Das zweite Problem ist, dass Sie eine char Array übergeben zu test (was zu einem char * zerfällt), aber die Funktion eines int erwartet.

die Definition von test bewegen, bevor main dass definiert so wird, bevor es verwendet wird, und die von int zu char *point Parameter ändern.

0

1) Es möchte eine Funktion Prototyp oder für die Funktion über Ihre Haupt deklariert werden.

2) Der Parameter Punkt in

void test (int point) 

ist ein Zeiger, kein Int.

Verwandte Themen