Forum: PC-Programmierung Argument is incompatible with corresponding format string conversion


von Jim S. (jimstreet)


Lesenswert?

Hallo Comunity,

Ich habe ein Problem mit meinem Code.
Er arbeitet richtig aber es kommt andauernd folgender Fehlerhinweis:

- Argument is incompatible with corresponding format string conversion.

Kann mir jemand sagen, was bei meinem String falsch ist?

--------------
...
float a;
int b, c;
char d[24];
...
sscanf(buffer,"%f%d%d%s", &a, &b, &c, &d);
...
-------------

Die Line aus der ausgelesen wird sieht zum Beispiel so aus:
0.111111 11 8 1111111111111111

Vielen Dank

von Mark B. (markbrandis)


Lesenswert?

Diese Beispiel kompiliert und läuft bei mir ohne Fehler/Warnung:

1
#include <stdio.h>
2
3
int main()
4
{
5
    float a;
6
    int b, c;
7
    char d[24];
8
    char buffer[100];
9
    
10
    strcpy(buffer, "0.111111 11 8 1111111111111111");
11
    
12
    sscanf(buffer, "%f%d%d%s", &a, &b, &c, d);
13
    
14
    printf("a, b, c, d: %s\n", buffer);
15
    
16
    return 0;
17
}

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

&d --> d

von Mark B. (markbrandis)


Lesenswert?

Sorry. Sollte natürlich so lauten:

1
#include <stdio.h>
2
3
int main()
4
{
5
    float a;
6
    int b, c;
7
    char d[24];
8
    char buffer[100];
9
    
10
    strcpy(buffer, "0.111111 11 8 1111111111111111");
11
    
12
    sscanf(buffer, "%f%d%d%s", &a, &b, &c, d);
13
    
14
    printf("a, b, c, d: %f%d%d%s\n", a, b, c, d);
15
    
16
    return 0;
17
}

Johann L. schrieb:
> &d --> d

Korrekt, nur verursacht das meines Erachtens nach nicht die Warnung, die 
der Themenersteller angibt. Sondern eher ein:

sscanf.c: In function `main':
sscanf.c:12: warning: char format, different type arg (arg 6)

@Jim:
Wie ist denn buffer deklariert?

: Bearbeitet durch User
von mloidl (Gast)


Lesenswert?

Mark Brandis schrieb:
> Korrekt, nur verursacht das meines Erachtens nach nicht die Warnung, die
> der Themenersteller angibt. Sondern eher ein:
>
> sscanf.c: In function `main':
> sscanf.c:12: warning: char format, different type arg (arg 6)

Auch ich bekomme die selbe Compilerwarnung wenn ich den String mittels 
&d einzulesen versuche, obwohl es funktioniert.

Möglicherweise hängt es vom Compiler ab welche Warnung ausgegeben wird.

Getestet mit g++ (GCC) 3.3.6

Gruss Martin

von Karl H. (kbuchegg)


Lesenswert?

mloidl schrieb:
> Mark Brandis schrieb:
>> Korrekt, nur verursacht das meines Erachtens nach nicht die Warnung, die
>> der Themenersteller angibt. Sondern eher ein:
>>
>> sscanf.c: In function `main':
>> sscanf.c:12: warning: char format, different type arg (arg 6)
>
> Auch ich bekomme die selbe Compilerwarnung wenn ich den String mittels
> &d einzulesen versuche, obwohl es funktioniert.
>
> Möglicherweise hängt es vom Compiler ab welche Warnung ausgegeben wird.

Möglich.
Da d aber ein char Array ist und im Format String ein %s steht, ist 'd' 
korrekt (und nicht &d) und passt als solches auch zu %s

UNd das stimmt auch dann, wenn die Compilerhersteller aufgegeben haben 
und stillschweigend bei Arrays das & ignorieren, obwohl es eigentlich 
nicht richtig ist.

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.