TheBeginner schrieb:
> char *connection_establishment(void)
> {
> char id_request="ID request";
> char *pointer= (char*)malloc(strlen(id_request)+1);
> strcpy(pointer,id_request);
> return pointer;
> }
keine so wahnsinnig gute Idee.
Siehe
http://www.mikrocontroller.net/articles/FAQ#wie_schreibt_man_eine_Funktion.2C_die_einen_String_liefert.3F
> ...
> test_pointer=connection_establishment;
das ist kein Funktionsaufruf.
> for(tx_cnt=0;tx_cnt<x;tx_cnt++) //x, maximale Größe des Strings
und wer sagt dir, dass der Rückgabestring auch tatsächlich so gross war?
Wenn schon dann müsstest du hier das Minium aus x und strlen vom
erhaltenen String nehmen.
> {
> txbuf[tx_cnt]=test_pointer+tx_cnt; //ins Array schreiben
wenn du Arrayzugriff machst, dann mach auch Arrayzugriff
txbuf[tx_cnt] = test_pointer[tx_cnt];
> }
> free(test_pointer); //leeren des speichers
> ...
aber warum so kompliziert?1 | test_pointer = connection_establishment();
|
2 | strcpy( txbuf, test_pointer );
|
3 | free( test_pointer );
|
noch besser, wenn an dieser Stelle txbuf in seiner Arrayform verfügbar
ist (und nicht einfach nur ein Pointer ist)
1 | test_pointer = connection_establishment();
|
2 | strncpy( txbuf, test_pointer, sizeof( txbuf ) );
|
3 | txbuf[sizeof(txbuf)-1] = '\0';
|
4 | free( test_pointer );
|
Aber eigentlich ist auch das ziemlicher Müll.
Die beste Methode ist es meistens, den Buffer in die Funktion
connection_establishment hinein zu übergeben (zusammen mit seiner
Länge), und die Funktion soll ihre Ergüsse gleich im Buffer ablegen.
Dann braucht man nicht allokieren und großartig herumkopieren.
> Leider bekomme ich Fehler,
>
> test_pointer=connection_establishment; // assignment from incompatible
> pointer type
logo. Du machst hier keinen Funktionsaufruf
>
> char *pointer= (char*)malloc(strlen(id_request)+1); // passing argument
> 1 of 'strlen' makes pointer from integer without a cast
char id_request="ID request";
char *pointer= (char*)malloc(strlen(id_request)+1);
id_request ist ein einzelner Character. Einer!
Wie soll denn da ein kompletter String reinpassen?
1 | char *connection_establishment(void)
|
2 | {
|
3 | char id_request[] = "ID request";
|
4 |
|
5 | char *pointer= (char*)malloc(strlen(id_request)+1);
|
6 | strcpy(pointer,id_request);
|
7 | return pointer;
|
8 | }
|
oder
1 | char *connection_establishment(void)
|
2 | {
|
3 | char* id_request = "ID request";
|
4 | char *pointer= (char*)malloc(strlen(id_request)+1);
|
5 | strcpy(pointer,id_request);
|
6 | return pointer;
|
7 | }
|
Aber egal wie du es machst: Du brauchst ein C-Buch!