Übergabe eines char-Arrays aus einer Unterfunktion über Pointer
-
Guten Abend. Ich soll für eine Projektarbeit ein Verschlüsselungs-Programm schreiben und die Schritte sinnvoll in Unterfunktionen verpacken. Dafür muss ich einen String in die Funktion kriegen (was glaube ich funktioniert) und auch wieder heraus. Und da haperts ein bischen.
void stufe1(char text[81], int shift, char *code_st1[81]) { int i, code1[81], code2[81]; char code3[81]; /* über eine fertige unterfunktion werden hier die ascii zeichen in zahlen umgewandelt */ for(i = 0; text[i] != '\0'; i++) { code1[i] = CodeTab[text[i]]; } /* einfacher buchstaben-shift, wieder vorgegeben */ for(i = 0; code1[i] != '\0'; i++) { code2[i] = (CODECHARANZ + code1[i] + shift) % CODECHARANZ; } /* aus den zahlen werden wieder ascii zeichen gemacht */ for(i = 0; code2[i] != '\0'; i++) { code3[i] = DecodeTab[code2[i]]; } *code_st1 = code3; } int main(void){ /* die vorkommenden variablen in main; */ char code_st1[81], text[81]; int shift; /* aufruf der funktion */ stufe1(text, shift, &code_st1); }
Ich denke das sind die wichtigen Teile. per scanf lese ich den string text ein, der wird übergeben zusammen mit shift und rauskommen soll code_st1
Beim Aufruf (also der Zeile im Code) zeigt mir MS Visual Studio 2008 dann diesen Fehler
Fehler 170 error C2664: 'stufe1': Konvertierung des Parameters 3 von 'char [81]' in 'char *[]' nicht möglich
Ich hab heut mal versucht mich über Pointer und Arrays schlau zu machen, aber irgendwie hat das nicht geklappt. Hab ein bischen rumprobiert und meistens eine Variante dieses Fehlers gekriegt. mit integer hab ich das auf jeden fall so schonmal hingekriegt, aber da gings auch nur um eine zahl, kein array. Ich weiß das ich das auch über return machen könnte (wobei aber auch ein ähnlicher fehler gemeldet wird. wie mach ich dem compiler klar dass eine funktion ein array zurückgibt?) aber bei stufe 2 muss ich sowieso 2 werte übergeben. Kann mir jemand helfen?
-
char arrays als Strings sind böse.
char *verschluessel(char *s){ char *r = malloc(sizeof(char)*(LaengeDesVerschluesseltenTextes+1)); r = tuwaskomisches(s); return r; } char *test = "mein test string", temp = verschluessel(test); printf("Klartext: %s\nVerschluesselter Text: %s\n", test, temp); free(temp);
So geht das mit dem String zurückgeben.
Arrays kannst du dir vielleicht als Tabelle vorstellen. Man kann alles mögliche in so eine Tabelle schreiben, char , char, int, structs, pointer, ...
Es geht aber immer nur eins. In deinem Fall meckert der Compiler dass du eine Tabelle von char * mit einer Tabelle von chars zusammenwürfelst was nicht klappen kann. Entweder chars oder char.
char *code_st1[81] bedeutet eine Tabelle mit 81 char pointern, also wahrscheinlich 81 Strings.
char code_st1[81] bedeutet eine Tabelle mit 81 chars, also Zeichen, also ein einzelner String bestehend aus 81 Zeichen.Du musst schon genau aufpassen ob du char oder char * oder char[] oder char *[] oder auch char ****[][][] meinst.
-
nwp2 schrieb:
char arrays als Strings sind böse.
hast du 'nen besseren vorschlag? kleiner tip: wir sind hier nicht in 'nem Java oder Python-forum. *fg*
-
;fricky schrieb:
hast du 'nen besseren vorschlag? kleiner tip: wir sind hier nicht in 'nem Java oder Python-forum. *fg*
Jup. char * benutzen. Macht alles so viel einfacher wenn man keine malloc-Allergie oder buffer[wirdschonreichen]-Sucht hat.
-
nwp2 schrieb:
;fricky schrieb:
hast du 'nen besseren vorschlag? kleiner tip: wir sind hier nicht in 'nem Java oder Python-forum. *fg*
Jup. char * benutzen. Macht alles so viel einfacher wenn man keine malloc-Allergie oder buffer[wirdschonreichen]-Sucht hat.
ach so, dann hab ich dich missverstanden. aber ja, ich habe definitiv eine malloc-allergie.