不清楚其中的一个步骤

以下程序的功能是:将无符号八进制数字构成的字符串转换为十进制整数。
例如,输入的字符串为:556,则输出十进制整数366

#include 
                  void main()
                  { char s[6];     int n,j;
                    gets(s);
                    if(s[0]!='\0')  n=s[0]-'0';
                    j=0;
                    while(s[++j]!='\0') n=n*8+s[j]-'0';
                    printf("%d\n",n);  
                  }

n=n*8+s[j]-'0'这一步为什么要减0呢?

在上述程序中,'0' 在 ASCII 码表中对应的十进制数为 48。当字符串 s 中的字符转换为整数时,可以使用公式 s[j] - '0' 来计算,其中 '0' 用于将字符转换为数字。

例如,如果 s[j] 为 '5',则 s[j] - '0' 的值为 53 - 48 = 5。

这个能得到s[j]这个字符对应的数字。
比如 s[j] 是 ‘3’这个字符,他的ascii码是51 ,‘0’的ascii码是48 , 51-48 = 3
这样就将字符‘3’转换成了数字3

因为s是个char数组,里面存的是个字符,你直接加,加的是ascii码
'0'-'0'=0
'1'-'0'=1
减掉就变数字了