Problem mit strtok und Funktionsaufruf
-
Hallo zusammen,
ich habe folgenden Code:#include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> int calc(char* arg2); main(int argc, char* argv[]) { calc("2+3"); } int calc(char* arg2){ //char arg[]="2+3"; char delimiter[] = "+-"; char *ptr; ptr = strtok(arg2, delimiter); printf("%s", ptr); return 0; }
So das gannze führt zu einem Segfault.
wenn ich aber folgendes tue:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> int calc(char* arg2); main(int argc, char* argv[]) { calc("2+3"); } int calc(char* arg2){ char arg[]="2+3"; char delimiter[] = "+-"; char *ptr; ptr = strtok(arg, delimiter); printf("%s", ptr); return 0; }
Ich ändere einfach ptr = strtok(arg2 , delimiter); zu ptr = strtok(arg, delimiter);
und benutze das chararray arg aus der Funktion.
Nun funktioniert alles gut.Kann mir evtl. jemand erklären warum dies passiert bzw. was ich machen muss, damit Variante 1 funktioniert.
Ich habe auch schon
int calc(char arg2*){
int calc(char arg2[]){
int calc(char arg2){
probiert...nichts will funktionierenViele Grüße
Florian
-
So geht's:
char s[]="2+3"; calc(s);
strtok will schreiben, und du hast ihm ein Stringliteral gegeben.
-
Hallo,
das liegt daran das strtok an die gefundenen Positionen eine 0 reinschreiben will.
Bei char arg ="2+3"* darf strtok das aber nicht, weil arg auf einen schreibgeschützten Speicherbereich zeigt.
Bei char arg[] = {"2+3"} darf strtok das, weil der vom Array arg belegte Speicherplatz beschrieben werden darf.florianwe23 schrieb:
Ich habe auch schon
int calc(char arg2*){
int calc(char arg2[]){
int calc(char arg2){
probiert...nichts will funktionierenViele Grüße
FlorianDeine erste Deklaration int calc(char arg2)* ist schon ok, du musst bloß ein beschreibbares Array übergeben und keinen Zeiger auf ein schreibgeschütztes Literal.
Gruß,
B.B.
-
jo funzt vielen dank!