2016-04-20 6 views
-4

Ich lese ein Fifo, und dann versuche ich ein anderes Array in einem anderen Format daraus zu machen. Ich weiß, dass buf seine Werte wie erwartet bekommt, da das Drucken gut ist.Passing Argument 2 von 'strcat' macht Zeiger aus Integer ohne Besetzung [-Wint-Konvertierung]

char graphic[100]; 
char buf[100]; 
read(fd_read,&buf,50); 
for(int i=0; i<10; i++){ 
strcat(graphic, buf[i]); } 

gibt mir Fehler:

passing argument 2 of ‘strcat’ makes pointer from integer without a cast [-Wint-conversion]

ich Eclipse unter Linux verwenden, auf C. ... HILFE?

+0

Was ist 'whichCharIsIt'? Bitte sagen Sie im echten Code 'Grafik' ist gut initialisiert. –

+0

Ich lege es auf sein einfaches Format zurück. Grafik ist alles gut, ich überprüfte – aviadm71

+2

'strcat (Grafik, buf [i]);' -> 'Grafik [i] = buf [i];'? – BLUEPIXY

Antwort

4

Signature of strcat ist:

char *strcat(char *dest, const char *src); 

d.h. zweites Argument sollte Zeiger auf char Array sein, das mit '\0' endet. In Ihrem Fall übergeben Sie eine einzige char acter.

Statt for(int i=0; i<10; i++){ strcat(graphic, buf[i]); }, müssen Sie möglicherweise nur: (graphic initialisiert irgendwo Unter der Annahme)

strcat(graphic, buf); /* Use strncat for limited number of characters */ 

auch sicher, dass string.h in Ihrem Programm enthalten ist.


Um die Zeichen selbst anzufügen, können Sie nur die Zuweisung verwenden, anstatt eine Funktion zu verwenden.

/* Append one character (ith character of buf[i]) */ 
const size_t len = strlen(graphic); 
if(len + 1 >= sizeof graphics) { /* Error handling */ } 
else { 
    graphic[len] = buf[i]; 
    graphic[len + 1] = '\0'; 
} 
+0

also sollte ich ein neues Zeichen hinzufügen, das buf [i] + '\ 0' enthält, bevor du es in graphic array by strcat einfügst ??? – aviadm71

+0

aber ich muss etwas mehr Zeichen zwischen den Zeichen von buf einfügen, was bedeutet, dass ich es manchmal ändern muss. Ich muss es Char von Char erhalten – aviadm71

+0

In diesem Fall, fügen Sie die Zeichen selbst an. –

0

syntaxt von strcat():

char *strcat(char *dest, const char *src); 

Die beiden Parameter Zeichenzeiger sein sollte. In Ihrem Code ist buf ein Zeichenzeiger (oder ein Array), aber im zweiten Parameter für den Aufruf von strcat haben Sie nicht das gesamte Array (buf) gesendet und es so zu einem Zeichen gemacht.

versuchen, dies stattdessen könnte dies Ihre Anforderungen erfüllen:

char graphic[100]; 
char buf[100]; 
read(fd_read, &buf, 50); 

strcpy(graphic, ""); 
strncat(graphic, buf, 10); //last parameter tells you how many bytes to append 

Sobald Sie den folgenden Link, um weitere Informationen über den Fehler finden:

C strcat - warning: passing arg 2 of `strcat' makes pointer from integer without a cast

+0

'strcat()' in einen nicht initialisierten Puffer ('Grafik' hier) ruft das berüchtigte undefinierte Verhalten auf. – alk

+0

@alk, ja. In dem Grafik-Array, an das das Puffer-Array angehängt wird, sind Abfallwerte vorhanden. Ich habe meine Antwort bearbeitet, um solche Verhaltensweisen zu entfernen. :-) –

Verwandte Themen