Я пытаюсь создать простую программу, которая просто записывает вашу рабочую директорию в файл, и я не могу, для жизни меня, выяснить, что я делаю неправильно. Независимо от того, что я делаю, мой буфер хранит null после моего вызова getcwd(). Я подозреваю, что это может быть связано с разрешениями, но, как утверждается, linux теперь сделал какое-то волшебство, чтобы гарантировать, что getcwd почти никогда не имеет проблем с доступом (ключевое слово «почти»). Может ли кто-нибудь проверить его на своих машинах? Или есть явная ошибка, которую мне не хватает?Последовательное получение нулевой ценности в C String с использованием 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;
}
скомпилирован с gcc main.c
(файл с именем «main.c»)
EDIT: Как было отмечено различными плакатами, SizeOf (LOC) принимает размер указателя полукокса, а не размер пространства, выделенного этому указателю. Изменил его на malloc (sizeof (char) * 1000), и все это работает подливки.
Minor придираться: 'SizeOf (Char)' гарантированно будет 1 так что наличие его там в лучшем случае синтаксический сахар. – Magisch
'sizeof (loc)' не делает то, что вы думаете, что он делает. –
Кроме того, 'sizeof (loc)' даст вам размер указателя char, а не размер вашей памяти, выделенный для 'loc' – Magisch