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)第三个参数在这里特别重要,因为数字模式的传统表示法是八进制,不管是否有前导零。将数字模式字符串转换为十进制可能会产生意外结果。mode=strtol(argv[2],NULL,8)和mode=strtol(argv[2],NULL,0)都会使数字变为十进制,因此如果我引入0664,它们会将我的模式设置为436。爱德华多拉莫斯:我刚刚测试过这个,它工作正常。你是怎么检查值的?是的,它确实有用。printf()欺骗了我。非常感谢你!