当使用fprintf时,我在输出中得到了字符的镜像数组

Elg*_*non -2 c arrays printf char

我正在将数字从10个计数系统(cs)转换为另一个,并将其打印到文件中。

void Fileoutkey(char *res1, char *res2, int sys1, int sys2) //KANON
{
    FILE *fp;
    if(fp = fopen("task_out.cpp", "w"))
    {

        fprintf(fp, "%d: %s\n", sys1, res1);
        fprintf(fp, "%d: %s\n", sys2, res2);
        fclose(fp);
    }
    else
    {
        printf("No such file in directory.\n");
        exit(1);
    }
}
Run Code Online (Sandbox Code Playgroud)

转换功能(可以)

int numSystem1 = 12;
char digits1 [13] = "0123456789AB";
char result1 [18] = "";
int digCount1 = 0;
while (num)
{
    int rem1 = num % numSystem1;
    result1 [digCount1] = digits1[rem1];
    num /= numSystem1;
    digCount1++;    
    for (int i = digCount1; i >= 0; i--)
    {
        cout << result1[i]; //here i get 10
    }   
}
Run Code Online (Sandbox Code Playgroud)

当从10转换为12 cs(例如number)时1210我得到的不是01。控制台中的输出正确。

Chr*_*ner 6

转换代码绝对不起作用。以将12从10转换为12的示例为例,循环执行以下操作:

第一次num是12。12 % 12是0-因此存储为字符串的第一个字符。num然后被12除以成为1。

第二次1 % 12为1,并将其添加为第二个字符。这意味着您的字符串现在包含“ 01”。这就是您在输出中看到的-代码正在以相反的顺序添加数字。

您可以算出数字的大小,然后从该数字开始倒数以在另一个方向添加字符,或者使用反转字符串。

同样在循环之后,您需要添加NUL终止符,如下所示:

result1 [digCount1] = '\0';
Run Code Online (Sandbox Code Playgroud)