Ich versuche, einen cron AusdrucksparserUnerwartete Zeichen beim Drucken char-Array
Ich habe die folgenden Methoden (Work in progress) zu bauen:
Cron parseCron(char* cronStr) {
char *dup = strdup(cronStr);
char* p;
char* cronAtoms[5];
int i = 0;
p = strtok(dup, " ");
while(p != NULL){
p = strtok(NULL, " ");
cronAtoms[i] = p;
i++;
}
return generateCron(cronAtoms);
}
und diese ein:
Cron generateCron(char **cronAtoms){
Cron cron;
for(int i = 0; i < 5; i++) {
printf("%s\n", cronAtoms[i]);
}
return cron;
}
Die Eingabezeichenfolge ist , wenn ich die Ergebnisse hier ausdrucken, was ich bekomme:
*
*
*
*
@
Ich muss zugeben, ich bin ein wenig überrascht, aber ich denke, ich verstehe warum. Der letzte im Array cronAtoms
gespeicherte Zeiger kann das abschließende NULL-Zeichen enthalten oder möglicherweise einen Bruch im benachbarten Speicher. Ich bin kein C-Experte, daher ist es durchaus möglich, dass ich mich bei meiner Annahme geirrt habe.
Noch wichtiger ist, ich möchte eine todsichere Methode, richtig wissen, um das letzte Zeichen extrahieren (haben „*“ anstelle von „@“)
überspringen Sie das erste *, weil Sie STRTOK zweimal aufrufen, bevor Sie den Index 0 von cronAtoms setzen. Sie setzen nur die 4 Indizes von cronAtoms. Das @ ist völlig zufällig. Es hätte alles sein können. – Pemdas
... also verschiebe 'p = strtok (NULL," "); zwei Zeilen nach unten, so folgt" i ++; " –