ZAX*_*ZAX 2 c pointers memory-management increment
我正在使用 C 的sprintf函数写入指针。
我将空白字符(空格)、逗号和整数写入该指针。指针分配了 4096 个字节。
我在编写时手动增加指针,但是在格式化时遇到问题。
这是代码:
sprintf(result, "%d ", number);
memory += 3;
sprintf(result, "%d, ", number);
memory += 4;
Run Code Online (Sandbox Code Playgroud)
输出:
printf("%s", (char *)memory);
根据程序的运行情况,我执行以下操作之一。最初我分别使用了 2 和 3,但这导致了我输出时间距方式的格式问题。我在网上查了一下,发现整数占用 2 个字节的内存,而字符占用 1 个字节,因此我分别更改为 3 和 4。(空格 (1) + 整数 (2)) = 3 和 (空格 (1) + 逗号 (1) + 整数 (2)) = 4. 但是,当我使用这些时,我会丢失一些输出数据 - 看起来它把它剪短。同样,我已经为指针分配了 4096 个字节,这应该足以正确输出。
也许我错误地增加了我的指针或错误地打印出来?
并不完全清楚您在这里做什么,但我假设您正在尝试根据 sprintf 调用所占用的字符数调整输出缓冲区中的写入指针。
sprintf 返回实际写入输出缓冲区的字符数,因此不要将指针增加猜测的字符数,而是使用返回值。
numWritten = sprintf(result, "%d ", number);
memory += numWritten;
Run Code Online (Sandbox Code Playgroud)
我假设内存是一个字符*;如果它是指向其他类型的指针,你也会得到意想不到的结果,因为算术会受到指针所指内容的影响。