C:反转数组仅在显式循环时打印

C : reversed array only prints when explicitly looped through

我是'saving'把一个数组反转成一个新数组。 示例:

array A = abc

array B = cba

下面的代码是我的解决方案。新的反向 array B 不会打印,除非明确循环。单个元素上的 fprint %sfprint %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)