C 如何将以0开头的数字字符串转换为八进制数

C 如何将以0开头的数字字符串转换为八进制数,c,atoi,string-conversion,C,Atoi,String Conversion,我正在尝试这样做: void main(int argc, char *argv[]){ int mode,f; mode = atoi(argv[2]); if((f = open("fichero.txt",O_CREAT, mode))==-1){ perror("Error"); exit(1); } } 然而,当我引入一个像0664这样的数字时,mode等于664。如何保持前导零?函数假定字符串是数字的十进制表示形式。如果要从不同的基转换,请使用strt

我正在尝试这样做:

void main(int argc, char *argv[]){
int mode,f;

mode = atoi(argv[2]);

if((f = open("fichero.txt",O_CREAT, mode))==-1){    
    perror("Error");
    exit(1);
}

}

然而,当我引入一个像0664这样的数字时,mode等于664。如何保持前导零?

函数假定字符串是数字的十进制表示形式。如果要从不同的基转换,请使用
strtol

mode = strtol(argv[2], NULL, 0);
第三个参数指定基数。如果此值为0,则如果字符串以
0x
开头,则将其视为十六进制;如果字符串以
0
开头,则将其视为八进制;否则,将视为十进制

如果希望字符串始终是八进制表示,则将基数设置为8

mode = strtol(argv[2], NULL, 8);

使用
strtol(argv[2],NULL,8)