在C语言中将long类型数组转换为换行分隔的ASCII字符串的实现方法
C语言实现long数组转换行分隔字符串方案
前置说明
C语言中long为整数类型,NULL是空指针常量,你示例中数组存储的NULL实际会被转换为整数0,我们默认以0作为数组的终止标记,你可以根据实际业务约定修改终止值。
实现思路
- 遍历long数组,读到终止标记时停止遍历
- 逐次将
long类型值转为十进制字符串,追加到输出缓冲区后拼接\n - 全程做缓冲区边界校验,避免内存越界
完整可运行代码
#include <stdio.h> #include <stddef.h> // 可根据实际场景修改终止值和缓冲区最大值 #define ARRAY_TERMINATOR 0 #define MAXLINE 1024 /** * @brief 将long数组转换为换行分隔的字符串 * @param arr 输入long数组,以ARRAY_TERMINATOR作为结束标记 * @param buf_out 输出缓冲区 * @param buf_size 输出缓冲区总大小 * @return 0转换成功,-1转换失败(缓冲区不足/写入错误) */ int long_arr_to_line_str(long *arr, char *buf_out, size_t buf_size) { if (arr == NULL || buf_out == NULL || buf_size == 0) { return -1; } buf_out[0] = '\0'; size_t used_len = 0; for (size_t i = 0; arr[i] != ARRAY_TERMINATOR; i++) { int write_bytes = snprintf(buf_out + used_len, buf_size - used_len, "%ld\n", arr[i]); // snprintf返回负值代表写入出错,返回值大于等于剩余空间代表缓冲区不足 if (write_bytes < 0 || (size_t)write_bytes >= buf_size - used_len) { return -1; } used_len += write_bytes; } return 0; } // 测试示例 int main() { long array[30] = {172648712, 27146721, 27647212, 0, 0}; char bufOut[MAXLINE]; if (long_arr_to_line_str(array, bufOut, MAXLINE) == 0) { // 输出结果和你要求的"172648712\n27146721\n27647212\n"完全一致 printf("转换结果:\n%s", bufOut); } else { printf("转换失败,请检查缓冲区大小或输入参数\n"); } return 0; }
可选调整
如果不需要末尾的最后一个换行符,可以在遍历结束后添加一行代码移除:
if (used_len > 0) { buf_out[used_len - 1] = '\0'; }
内容的提问来源于stack exchange,提问作者Levi Montgomery
相关产品推荐
相关产品推荐

