Печать текущего рабочего каталога в c с помощью указателей
Вопрос
Цель :Распечатайте текущий рабочий каталог в c на компьютере с Linux.
Без использования указателей он дает правильный вывод.
#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;
}
Но с указателем отображается следующая ошибка
getcwd() error : : Numerical result out of range
Решение
Это потому, что когда buf
является указателем, sizeof(buf)
- это количество байтов, необходимых для хранения указателя , а не размер массива, как в коде, который вы прокомментировали.
Вам необходимо пройти размер, который вы выделили (I.E. 1024) вместо этого, как это:
size_t allocSize = sizeof(char) * 1024;
buf = (char *)malloc(allocSize);
if((cwd = getcwd(buf, allocSize)) != NULL) ...
. Другие советы
sizeof(buf)
вернет размер char*
, который, как будто много битов широким вашим процессором (32 бита или 64 бита).
То, что вы хотите, это использовать магический номер, с которым вы Malloc'eed, в этом случае 1024.
Попробуйте:
#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);
Здесь вы указываете размер как sizeof(buf)
который вернет размер buf
указатель, который будет зависеть от машины.
Вам необходимо указать 1024 в аргументе getcwd
.