assignment from incompatible pointer type

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • assignment from incompatible pointer type

    Quellcode

    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #include <unistd.h>
    4. #include <string.h>
    5. #define CMD_MAX_SIZE sysconf(_SC_LINE_MAX)
    6. #define CMD_ARG_MAX_SIZE sysconf(_SC_ARG_MAX)
    7. #define CMD_DELIM " \t\n"
    8. int main(int argc, char *argv[])
    9. {
    10. while (!feof(stdin)) {
    11. /* Path ausgeben */
    12. char cwd[FILENAME_MAX];
    13. getcwd(cwd, FILENAME_MAX);
    14. printf("%s:",cwd);
    15. /* Befehl einlesen */
    16. char cmd[CMD_MAX_SIZE];
    17. char **args[CMD_ARG_MAX_SIZE];
    18. if (fgets(cmd, CMD_MAX_SIZE, stdin)) {
    19. /* Tokens trennen */
    20. int size = 0;
    21. char *arg;
    22. while ((arg = strtok(cmd, CMD_DELIM)) != NULL) {
    23. args[size++] = arg; /* Hier mekert er */
    24. }
    25. }
    26. }
    27. }
    Alles anzeigen

    wo liegt der Fehler?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von nvidia ()

  • Sicher, dass du hier dein Array vom richtigen Datentypen deklarierst?

    Quellcode

    1. char **args[CMD_ARG_MAX_SIZE];

    Das ist ein Array von Pointern auf Char-Pointer. Also strengenommen ein Pointer auf Pointer auf Pointer... Ich schätze das ganze mit nur einem Stern ist eher was du brauchst ;)

    Zusätzlich benutzt du strtok falsch. Nur beim ersten Aufruf, darfst du den String, in diesem Fall cmd, als ersten Parameter übergeben. Bei den weiteren aufrufen muss der erste Parameter NULL sein, sonst wird er dir jedesmal das gleiche arg zurückliefern.

    So sieht normal die Benutzung von strtok aus:

    Quellcode

    1. pch = strtok (str," ,.-");
    2. while (pch != NULL)
    3. {
    4. printf ("%s\n",pch);
    5. pch = strtok (NULL, " ,.-");
    6. }


    (geklaut von cplusplus.com/reference/clibrary/cstring/strtok/)