Argument is incompatible with corresponding format string conversion

OP #3906315
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
#3906330
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
}
#3906333
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?
Gast #3906394
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
#3906606
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren