Frage

Ziel :Drucken Sie das aktuelle Arbeitsverzeichnis in c auf einem Linux-Computer aus.

Ohne Zeiger zu verwenden, gibt es die richtige Ausgabe..

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<errno.h>
int main()
{
    //char buf[1024];

    char * buf;
    char * cwd;
    buf = (char *)malloc(sizeof(char) * 1024);

    if((cwd = getcwd(buf, sizeof(buf))) != NULL)
            printf("pwd : %s\n", cwd);
    else
            perror("getcwd() error : ");
    return 0;
}

Aber mit Zeiger zeigt es folgenden Fehler

getcwd() error : : Numerical result out of range
War es hilfreich?

Lösung

Dies liegt daran, wenn buf ist ein Zeiger, sizeof(buf) ist die Anzahl der Bytes, die zum Speichern eines Zeiger, nicht die Größe des Arrays, wie im Code, den Sie auskommentiert haben.

Sie müssen die von Ihnen zugewiesene Größe übergeben (z.1024) stattdessen so:

size_t allocSize = sizeof(char) * 1024;
buf = (char *)malloc(allocSize);
if((cwd = getcwd(buf, allocSize)) != NULL) ...

Andere Tipps

sizeof(buf) gibt die Größe von zurück char* dies ist jedoch so viele Bits breit, wie Ihr Prozessor ist (32 Bit oder 64 Bit).

Sie möchten die magische Zahl verwenden, mit der Sie malloziert haben, in diesem Fall 1024.

Versuchen Sie dies:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>

int main()
{
    //char buf[1024];

    char * buf;
    char * cwd;
    buf = (char *)malloc(sizeof(char) * 1024);

    if((cwd = getcwd(buf, 1024)) != NULL)
            printf("pwd : %s\n", cwd);
    else
            perror("getcwd() error : ");
    return 0;
}

char *getcwd(char *buf, size_t size);
Hier geben Sie die Größe als an sizeof(buf) welches wird die Größe des zurückgeben buf zeiger, der maschinenabhängig sein wird.
Sie müssen 1024 im Argument angeben, um getcwd.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top