我正在尝试做这件事:
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。我该如何保留前导零?
我正在尝试做这件事:
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。我该如何保留前导零?
atoi
函数假定字符串是一个十进制数的表示。如果您想要转换不同进制的数,请使用strtol
。
mode = strtol(argv[2], NULL, 0);
第三个参数指定数字的进制,如果该值为0,则会根据开头是否是0x
来判断字符串是否为十六进制,是否以0
开头来判断是否为八进制,否则将视为十进制。
如果你期望字符串始终是八进制表示,则将基数设置为8.
mode = strtol(argv[2], NULL, 8);
strtol(argv[2], NULL, 8);
。该函数将把argv[2]
解释为一个八进制数,并将其转换为长整型返回。 - Eugene Sh.