Anfängerproblem mit int und char beim zusammenfügen

eagle1985

Mitglied
Hallo zusammen,

ich hoffe irgendjemdand kann mir weiterhelfen.

ich habe zwei int variablen welche ich zusammen in einem String also char ablegen möchte damit ich diese über eine serielle schnittstelle senden kann.

nun klappt das mit dem zusammenfügen der beiden ints nicht so ganz.

habe mal folgendes probiert was auch funktioniert:

Code:
    char n1[] = "asdf";
    char n2[] = "jklö";

    char n3[strlen(n1) + strlen(n2) + 1];


    strcpy(n3, n1);
    strcat(n3, n2);

mit int funktioniert das ganze nun nicht:

Code:
    int temp1 = getInkremental();
    int temp2 = drehtischPosition();
    char n4[strlen(temp1) + strlen(temp2) + 1];
    strcpy(n4, temp1);
    strcat(n4, temp2);

    printf("STRCAT mit Int: %s\n", n4);

hat jemand eine andere Idee wie ich dies realisieren kann?

greez
 
Hi

ich bezweifle das

Code:
char n3[strlen(n1) + strlen(n2) + 1];

funktioniert, weil die Länge dynamisch ist. Du musst da den Speicher dynamisch mit new reservieren.

Zu den Integern:

du kannst einfach nen Speicherbereich reservieren, der groß genug für beide Ints ist, und dann die Integer da reinkopieren

Code:
int temp1 = ...;
int temp2 = ...;

char *ints = new char[sizeof(int) * 2]

memcpy(ints, &temp1, sizeof(int) );
memcpy(ints+sizeof(int), &temp2, sizeof(int) );

// ints senden und am Ende freigeben

delete[] ints;

lg
 
Hallo,

besten Dank für die Antwort

nun hab ich folgendes Problem

wenn ich
Code:
char *ints = new char[7];
habe erhalte ich folgende Fehlermeldung:

error: 'new' undeclared (first use in this function)

wie kann ich das beheben oder weiss jemand woher dieser fehler kommt?

wie gesagt proge in c, kanne es sein dass new nur in c++ erlaubt ist?

greez
 
ups, ja new gibts nur in C++

in C musst malloc und free benutzen

Code:
char *ints = (char*) malloc(7);

free(ints);

lg
 
thx :) sieht jetzt schon besser aus :)

hab jetzt folgendes (getInt1und getInt2liefern beide einen int als rückgabewert
Code:
    int iInk= getInt1();
    int iDrePos = getInt2();

    char *ints = (char*) malloc(7);

    memcpy(ints, &iInk, sizeof(iInk));
    memcpy(ints+sizeof(iInk) + 1, &iDrePos, sizeof(iDrePos));


    printf("Test im posRob() --> %d\n", ints);

    char temp = iDrePos;
    printf("Test2 im posRob() --> %d\n", temp);

    free(ints);
also sollte ich einen char haben der '30-10' haben wenn:
getInt1() = 30 und getInt2() = -10

wenn ich dies nun so ausgebe
Code:
printf("Test --> %d\n", ints);
erhalte ich aber 6685064 und bei
Code:
printf("Test --> %c\n", ints);
das Zeichen ^

jetzt komm ich gar nicht mehr draus
 
also, wenn du dass so machst, dann sind die beiden Integer als Zahlen (nich als Zeichenkette) im Speicher.

hier mal nen exemplarische Anschauung

Code:
int tmp1 = 10;
int tmp2 = 20;

// ein Integer ist im allgemeinen 32Bit (4Byte groß)
// im Speicher steht jetzt für tmp1 folgendes

tmp1 : 00000000 00000000 00000000 00001010 // hab die Bytes der übersichthalber getrennt

beim memcpy wird einfach diese Bytefolge an eine andere Speicherstelle kopiert.

das was du machen willst, ist die Integer in einen String umwandeln, der hat ne beliebige Länge da der Bereich eines Integers von -2^31 (-2147483648) bis 2^31 (+2147483648) geht

Einen Integer kannst du mit sprintf oder itoa in einen String umwandeln und die kannst du dann auch mit printf ausgeben.

Wenn du nur den Integer ausgeben willst, reicht printf("%d", integer);

Edit: zum Nachschlagen: http://www.galileocomputing.de/openbook/c_von_a_bis_z/

lg
 
Zuletzt bearbeitet:
Erstmal @higret: Och du weißt nie welchen Standard er befolgt. Mit C99 war es erlaubt! ;)

sprintf ist hier auch das richtige um strings zu formatieren.
 
Zurück