2014-02-23 70 views
1

我正在写一个使用C的sprintf函数的指针。手动递增指针

我给这个指针写了空白字符(空格),逗号和整数。指针的分配为4096字节。

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

下面是代码:

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

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

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

取决于发生了什么节目我做上述下列操作之一。最初我分别使用了2和3,但是当我输出时,这导致格式化问题与间距方式。我在网上查了一下,发现整数需要2个字节的内存,而char的占用1个字节,因此我分别改为3和4。 (空间(1)+整数(2))= 3和(空间(1)+逗号(1)+整数(2))= 4。然而,当我使用这些我失去了我的一些输出数据 - 将其缩短。再次,我已经分配了4096字节的指针,这应该是足够的输出正确。

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

+1

也许'momory + = sprintf(result + memory,out_format,number); ... printf(“%s”,结果);' – BLUEPIXY

+0

+1,因为你发布了与我刚刚接受的答案相同的东西,稍后一点 – ZAX

回答

4

这里并不完全清楚你在做什么,但我假设你正试图根据sprintf调用所采用的字符数来调整输出缓冲区中的写入指针。

sprintf返回实际写入输出缓冲区的字符数,所以不要用猜测的字符数增加指针,而要使用返回值。

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

我假设内存是一个char *;如果它是一个指向某种其他类型的指针,您也会得到意想不到的结果,因为算术受指针指向的内容的影响。

+0

你的目标是正确的!对于清晰度问题抱歉,但这正是我所要求的,并且您提供了一个完美解决方案! – ZAX

1

事情是你正在将整数转换为字符串。每个整数的数字将消耗一个字节(sizeof(char))。

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

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