gpt4 book ai didi

使用 putchar() 函数和指针将整数转换为字符串

转载 作者:行者123 更新时间:2023-11-30 17:30:50 24 4
gpt4 key购买 nike

我有以下可用的整数 putchar() 函数:

void write_uint(unsigned n) {
if (n / 10) write_uint(n / 10);
putchar(n % 10 + '0');
}

void write_int(int n) {
if (n < 0) {
putchar('-');
write_uint(-(unsigned)n);
}
else write_uint(n);
}

我正在尝试修改它以使用指针将整数转换为字符数组,而不是按如下方式写入控制台:

void write_uint(unsigned n, char *p) {
if (n / 10) write_uint(n / 10, p);
*p++ = n % 10 + '0';
}

void write_int(int n, char *p) {
if (n < 0) {
*p++ = '-';
write_uint(-(unsigned)n, p);
}
else write_uint(n, p);
}

int n = 123456789;
char *str = malloc(13000), *p = str;

write_int(n, p);
*p++ = '\n';

然后打印字符串,但我得到的只是一堆空行。

感谢任何帮助

最佳答案

write_int()write_uint() 中,您递增 p 但因为您传递了 char *p ,该增量不会传递回调用者。因此,在示例代码的最后一行中,p 仍然等于 str,因此您会得到空行。

您可以通过以下方式之一修改您的代码:

  1. 传递 char ** 而不是 char *

    void write_uint(unsigned n, char **p) {
    if (n / 10)
    write_uint(n / 10, p);
    **p = n % 10 + '0';
    (*p)++;
    }

    void write_int(int n, char **p) {
    if (n < 0) {
    **p = '-';
    (*p)++;
    write_uint(-(unsigned)n, p);
    }
    else
    write_uint(n, p);
    }

    ....
    write_int( n, &p );
    *p++ = '\n';
  2. 返回修改后的指针

    char *write_uint(unsigned n, char *p) {
    if (n / 10)
    p = write_uint(n / 10, p);
    *p++ = n % 10 + '0';
    return p;
    }

    char *write_int(int n, char *p) {
    if (n < 0) {
    *p++ = '-';
    p = write_uint(-(unsigned)n, p);
    }
    else
    p = write_uint(n, p);
    return p;
    }

    ....
    p = write_int( n, p );
    *p++ = '\n';

当然,正如#pm100所说,你也应该在“\n”后面添加一个NUL

关于使用 putchar() 函数和指针将整数转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24914564/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com