将 int 列表转换为字符串 - C

Converting int list to string - C

我试图将一个整数列表转换成一个紧凑的字符串,但我遇到了分段错误。 代码如下:

    int *factors = job_factorization(number, size);
    char buffer[250] = { 0 };

    for (int i = 0; i < *size; i++) {
        sprintf( &buffer[i],  "%d ", *factors);
        factors++;
    }

job_factorization函数returns链表头部(有效,我已经测试过了),它会将size指向的值设置为实际大小列表的数量(因此是整数的数量)。 我不知道哪里出了问题,有人知道吗?

注意这些备注:

  • sprintf( &buffer[i], "%d ", *factors);不转换上一次转换结束时的数字

  • sprintf 不检查缓冲区溢出:如果 size 足够大,它最终会写入超出缓冲区的末尾。

  • 修改factors可能不是一个好主意,因为这个指针应该在使用后释放。

这是一个替代方案:

    int *factors = job_factorization(number, size);
    char buffer[1024];
    size_t pos = 0;

    for (int i = 0; pos < sizeof buffer && i < *size; i++) {
        pos += snprintf(buffer + pos, sizeof buffer - pos, "%d ", factors[i]);
    }

您还可以使用 2 个循环来计算转换所需的大小并分配所需的 space。