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