手动增加指针

时间:2014-02-23 23:33:18

标签: c pointers memory-management increment

我正在使用C的sprintf函数写入指针。

我将空白字符(空格),逗号和整数写入此指针。指针的分配为4096字节。

我在写的时候手动递增指针但是在格式化时我遇到了问题。

以下是代码:

sprintf(result, "%d ", number);
memory += 3;

sprintf(result, "%d, ", number);
memory += 4;

输出:  printf("%s", (char *)memory);

根据程序的进展情况,我会执行以下操作之一。最初我分别使用了2和3但是当我输出时导致了格式问题。我在网上查了一下,发现整数占用2个字节的内存而char取1个字节,因此我分别改为3和4。 (空格(1)+整数(2))= 3和(空格(1)+逗号(1)+整数(2))= 4.但是当我使用这些时,我输出的一些数据丢失了 - 它出现了削减它。同样,我已经为指针分配了4096个字节,这应该足以正确输出。

也许我正在错误地增加指针或将其打印错误?

2 个答案:

答案 0 :(得分:4)

目前还不完全清楚你在做什么,但我假设你正在尝试根据sprintf调用所占用的字符数来调整输出缓冲区中的写指针。

sprintf返回实际写入输出缓冲区的字符数,因此不使用猜测的字符数递增指针,而是使用返回值。

numWritten = sprintf(result, "%d ", number);
memory += numWritten;

我认为记忆是一个char *;如果它是指向其他类型的指针,你也会得到意想不到的结果,因为算术受指针所指向的影响。

答案 1 :(得分:1)

你要将整数转换为字符串。每个整数的数字将消耗一个字节(sizeof(char))。

int number = 1;
sprintf(result, "%d ", number);
>> "1 " -> two bytes
int number = 134;
sprintf(result, "%d ", number);
>> "134 " -> four bytes

要解决此问题,您应该计算数字中的数字并将其添加到内存指针。