我怀疑如何在不使用全局变量的情况下将数据填充到缓冲区追加中。
int main(){ char buffer [100]; for(int i = 0; i< 10; i ++){ write_to_buffer(缓冲液); }}
无效……
您需要从当前长度开始填充缓冲区。
int main(){ char buffer[100] = ""; // start with an empty string, so strlen(buffer) returns 0 for (int i = 0; i < 10; i++){ write_to_buffer(buffer); } } void write_to_buffer(char* buffer){ sprintf(&buffer[strlen(buffer)], "%f,", version); }
但是,对于cpu不是那么快的嵌入式编程,我肯定会将缓冲区当前和最大长度作为参数传递并返回附加字符的数量:
int main() { char buffer[100]; const size_t buffer_size = sizeof(buffer)/sizeof(buffer[0]); size_t buffer_pos = 0; for (int i = 0; i < 10; i++){ buffer_pos += write_to_buffer(&buffer[buffer_pos], buffer_size - buffer_pos); } } size_t write_to_buffer(char* buffer, size_t size){ return snprintf(buffer, size, "%f,", version); }
或者使用指针,但我更喜欢用size_t表示范围,而不是用结束指针表示:
int main() { char buffer[100]; char *pnt = buffer; for (int i = 0; i < 10; i++){ pnt = write_to_buffer(pnt); } const size_t buffer_len = pnt - buffer; } char* write_to_buffer(char* buffer) { return buffer + sprintf(buffer, "%f,", version); }
这是一种简单而有效的工作方式。像这样使用static关键字
int main(){ char buffer[100]; for(int i = 0; i<10; i++){ write_to_buffer(buffer); } } void write_to_buffer(char* buffer){ static pos=0; char* p = &buffer[pos]; sprintf(p, "%f,", version); pos+=1; }