Печать текущего рабочего каталога в c с помощью указателей

StackOverflow https://stackoverflow.com//questions/9697056

  •  13-12-2019
  •  | 
  •  

Вопрос

Цель :Распечатайте текущий рабочий каталог в 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top