2014-02-23 69 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 

要解決這個問題,您應該計算數字中的數字並將其添加到內存指針。