Ich versuche, ein einfaches Programm, das nur Ihr Arbeitsverzeichnis in eine Datei schreibt, und ich kann nicht für das Leben von mir herausfinden, was ich falsch mache. Egal was ich mache, mein Puffer speichert null nach meinem Aufruf von getcwd(). Ich vermute, dass es vielleicht mit Berechtigungen zu tun hat, aber angeblich hat Linux jetzt einige Zauberei gemacht, um sicherzustellen, dass getcwd fast nie Zugriffsprobleme hat (Stichwort "fast"). Kann jemand es auf ihren Maschinen prüfen? Oder gibt es einen offensichtlichen Fehler, den ich vermisse?Konsequent NULL-Wert in C-String mit Getcwd
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
printf("Error is with fopen if stops here\n");
FILE* out_file = fopen("dir_loc.sh","w+");
char* loc = malloc(sizeof(char)*10000);
size_t size = sizeof(loc);
printf("Error is with cwd if stops here\n");
loc = getcwd(loc,size);
printf("%s",loc);
fprintf(out_file,"cd %s",loc);
printf("Error is with fclose if stops here\n");
free(loc);
fclose(out_file);
return 0;
}
kompiliert mit gcc main.c
(die Datei "main.c" genannt)
EDIT: Wie von verschiedenen Plakaten erwähnt wurde, sizeof (loc) wurde die Größe eines char Zeiger nehmen, und nicht die Größe des Speicherplatzes, der diesem Zeiger zugewiesen ist. Änderte es zu malloc (sizeof (char) * 1000) und alles funktioniert Soße.
Minor Nitpick: 'sizeof (char)' ist garantiert 1 so zu sein, es hat dort besten syntaktischer Zucker ist. – Magisch
'sizeof (loc)' tut nicht, was Sie denken, dass es tut. –
Außerdem gibt 'sizeof (loc)' Ihnen die Größe eines char-Zeigers, nicht die Größe Ihres Speichers, der 'loc' zugeordnet ist. – Magisch