這個問題是答案。與格式化程序無關,而是涉及到複製到新緩衝區時的白癡。在C++中將0複製爲000?
我希望這是一個一行的答案。我有一個snprintf()
語句是類似如下:
snprintf(buffer, sizeof(buffer), "%03d", 0U);
我期待buffer
持有000
但由於某種原因它僅持有00
。假設緩衝區足夠大,足以容納我想要的東西。我是愚蠢的嗎?
編輯:
請參閱下面的完整代碼與上下文。我之前試圖簡化它,因爲我不認爲所有這些背景都是必要的。這一點仍然存在,使用%04u
在第一個CSV行中給我000
。 %03u
只給我00
。
uint16_t CSVGenerator::write_csv_data(TestRecord* record)
{
// Define the templates.
const char *row_template = "%04u,%6.3E,%6.3E,%6.3E,%6.3E,%6.3E\n";
char csv_row_buffer[CSV_ROW_BUFFER_SIZE];
// Add the data.
uint16_t row_count = 0U;
for (uint16_t reading = 0U; reading < MEASURE_READING_COUNT; ++reading)
{
// Parse the row.
snprintf(csv_row_buffer, sizeof(csv_row_buffer), row_template,
// Test ID
MEASURE_PERIOD_SECS * reading,
// Impedances Z1-Z5.
record->measurements[reading][0U],
record->measurements[reading][1U],
record->measurements[reading][2U],
record->measurements[reading][3U],
record->measurements[reading][4U]);
// Add it to the main buffer, excluding the terminator.
strncpy((m_csv_data_buffer + (reading * CSV_ROW_BUFFER_SIZE) - 1U),
csv_row_buffer, (sizeof(csv_row_buffer) - 1U));
// Increment the row count.
++row_count;
} // for : each reading.
return row_count;
}
緩衝區有多大,它是什麼,它是如何定義的? – Mat 2013-05-06 10:43:46
@Mat:說'char buffer [8U]'。 – 2013-05-06 10:45:21
緩衝區被定義爲'char * buffer = malloc(blah)';在任何情況下?另外如果你的號碼沒有簽名,你應該使用'%03u'(不是d) – Dave 2013-05-06 10:45:41