1

我想为我糟糕的英语道歉,因为它不是我的母语

所以,这是我的问题。在 C 语言中,有什么方法可以从我的标准输出中读取,并将我读到的任何内容转换为*char? 我只能使用 read、write、malloc 和 free 函数。

我的实际代码如下所示

char* acquire_shape()
{
    char *buffer[BUF_SIZE + 1];
    int ret;

    ret = read(0, buffer, BUF_SIZE)
    buffer[ret] = '\0';
    return *buffer;
}

但我不能把它变成一个字符串。

4

3 回答 3

0

请注意,您需要malloc在某个时候使用以下命令释放分配的内存free

char* acquire_shape(int fd) {
    char *buffer = malloc(BUF_SIZE + 1);
    int ret;

    if (buffer == NULL)
      return NULL;

    ret = read(fd, buffer, BUF_SIZE);
    buffer[ret] = '\0';
    return buffer;
}
于 2013-09-01T20:37:32.747 回答
0

char buffer[BUF_SIZE + 1];几乎是您的意思...除了您无法正确返回它,因为它是指向本地存储的指针(在函数返回后未定义)。您最好的选择是将您的功能更改为以下内容:

char* acquire_shape(char *buffer)
{
    int ret;

    ret = read(0, buffer, BUF_SIZE)
    buffer[ret] = '\0';
    return *buffer;
}

并这样称呼它:

    char mybuffer[BUF_SIZE + 1];
    acquire_shape(mybyffer);
于 2013-09-01T20:38:31.157 回答
0

char 的声明*buffer[BUF_SIZE + 1];不是指向 char 类型的指针,而是指向 char 类型的指针。如果要创建指向 char 的指针,则需要为缓冲区分配内存:

char *buf = (char *) malloc(BUFSIZE + 1);

if (buf == NULL)
    return NULL;

然后,您可以buf完全按照您buffer在代码示例中使用变量的方式使用该变量。

于 2013-09-01T20:42:47.163 回答