我正在使用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个字节,这应该足以正确输出。
也许我正在错误地增加指针或将其打印错误?
答案 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
要解决此问题,您应该计算数字中的数字并将其添加到内存指针。