C:反转数组仅在显式循环时打印
C : reversed array only prints when explicitly looped through
我是'saving'把一个数组反转成一个新数组。
示例:
array A = abc
array B = cba
下面的代码是我的解决方案。新的反向 array B 不会打印,除非明确循环。单个元素上的 fprint %s 和 fprint %c 都打印白色 space。这是什么原因造成的?
注意:函数接受数字并先转换为字符串。
int reverse(int x){
int len = int_length(x); //Functions works, gets the length
len++; //add room for [=10=]
char *num = (char *)malloc(len * sizeof(char));
char *ans = (char *)malloc(len * sizeof(char));
snprintf(num, len, "%d", x); //Turn the numbers into a char array
printf("%s\n", num);
int i;
for(i = 0; i < len; i++) {
ans[i] = num[len-(i+1)];
}
for(i = 0; i < len; i++) {
printf("%c\n", ans[i]); //PRINTS FINE
}
printf("\n%c\n", num[0]);
printf("%c\n", ans[0]); //NOTHING PRINTS
printf("%s\n", ans); //NOTHING PRINTS
return 0;
}
len++; //add room for [=10=]
char *num = (char *)malloc(len * sizeof(char));
char *ans = (char *)malloc(len * sizeof(char));
将长度加 1 很好,但是 不要将该数字用作实际字符串长度
如果不调试它,我的猜测是 nul 终止符在反转字符串的 start 处结束,在作为字符串打印时使其为空(但当您打印时显示正常're 强制打印超出放置错误的 nul 终止符的所有字符)
我会不改变len
,然后在分配时显式加1:
char *num = malloc(len+1);
char *ans = malloc(len+1);
(当然要去掉通常的冗余:不要从 malloc
转换指针,不要乘以 sizeof(char)
,因为它总是 1)
我是'saving'把一个数组反转成一个新数组。 示例:
array A = abc
array B = cba
下面的代码是我的解决方案。新的反向 array B 不会打印,除非明确循环。单个元素上的 fprint %s 和 fprint %c 都打印白色 space。这是什么原因造成的?
注意:函数接受数字并先转换为字符串。
int reverse(int x){
int len = int_length(x); //Functions works, gets the length
len++; //add room for [=10=]
char *num = (char *)malloc(len * sizeof(char));
char *ans = (char *)malloc(len * sizeof(char));
snprintf(num, len, "%d", x); //Turn the numbers into a char array
printf("%s\n", num);
int i;
for(i = 0; i < len; i++) {
ans[i] = num[len-(i+1)];
}
for(i = 0; i < len; i++) {
printf("%c\n", ans[i]); //PRINTS FINE
}
printf("\n%c\n", num[0]);
printf("%c\n", ans[0]); //NOTHING PRINTS
printf("%s\n", ans); //NOTHING PRINTS
return 0;
}
len++; //add room for [=10=]
char *num = (char *)malloc(len * sizeof(char));
char *ans = (char *)malloc(len * sizeof(char));
将长度加 1 很好,但是 不要将该数字用作实际字符串长度
如果不调试它,我的猜测是 nul 终止符在反转字符串的 start 处结束,在作为字符串打印时使其为空(但当您打印时显示正常're 强制打印超出放置错误的 nul 终止符的所有字符)
我会不改变len
,然后在分配时显式加1:
char *num = malloc(len+1);
char *ans = malloc(len+1);
(当然要去掉通常的冗余:不要从 malloc
转换指针,不要乘以 sizeof(char)
,因为它总是 1)