我正在尝试迭代单个const unsigned char
数组,并使用类型转换将每个元素分配/转换为新的char
数组,我读过的每个线程都建议使用类型转换,但它对我不起作用,下面是我的尝试:
#include <stdio.h>
#include <stdlib.h>
char *create_phone_number(const unsigned char nums[10]) {
char *new = malloc(11);
int i = 0;
for (; i<10; i++)
new[i] = (char)nums[i];
new[i] = ' ';
return new;
}
int main(void) {
char *num = create_phone_number((const unsigned char[]){ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
printf("%sn", num);
free(num);
return 0;
}
上面代码的stdout:
预期标准输出:
1111111111
如何将nums
中的元素转换为类型char
,并将转换后的值分配/存储在new
数组中(高效(?
转换为char
并不意味着将整数值转换为相应的ASCII字符;数值1是ASCII代码SOH(标题的开头(,它没有可打印的表示形式,因此输出为空。如果您知道所有值都在0到9的范围内,您可以将它们添加到ASCII'0'
中,以获得产生相关ASCII数字的char
值:
char *create_phone_number(const unsigned char nums[10]) {
char *new = malloc(11);
for (int i=0; i<10; i++)
new[i] = '0' + nums[i];
new[i] = ' ';
return new;
}
实际上,你根本不需要铸造它;+
的结果将是int
,它将存储回一个可以毫无问题地容纳它的char
(所以只需确保它们真的都是0
-9
值,否则你会得到奇怪的结果(。