Linux中too many arguments for format问题

在Linux下用C语言实现Bash功能。

在这个项目的创建子进程时,输出报错信息是这样写的。


不过在我调试的时候警告了。


意思是格式参数太多,身为一个强迫症患者,,我找了些资料。

所有人都说printf("%m",errno)等价于printf("%s",strerror(errno));

但我最后换了。

在编译的时候正常了

我用man找了下strerror的信息:


返回的是一个char*类型,%s输出当然没毛病。参数是int类型errno。

也就是说error是int类型,而用%m输出,,这个%m我真比较陌生,网上暂时没看到。


我把%m换成了%d,结果一切正常。


不过还是建议大家用perror函数,比较方便。

最后,附加上错误信息

errno0 :     Success
errno1 :     Operation not permitted
errno2 :     No such file or directory
errno3 :     No such process
errno4 :     Interrupted system call
errno5 :     Input/output error
errno6 :     No such device or address
errno7 :     Argument list too long
errno8 :     Exec format error
errno9 :     Bad file descriptor
errno10 :    No child processes
errno11 :    Resource temporarily unavailable
errno12 :    Cannot allocate memory
errno13 :    Permission denied
errno14 :    Bad address
errno15 :    Block device required
errno16 :    Device or resource busy
errno17 :    File exists
errno18 :    Invalid cross-device link
errno19 :    No such device
errno20 :    Not a directory
errno21 :    Is a directory
errno22 :    Invalid argument
errno23 :    Too many open files in system
errno24 :    Too many open files
errno25 :    Inappropriate ioctl for device
errno26 :    Text file busy
errno27 :    File too large
errno28 :    No space left on device
errno29 :    Illegal seek
errno30 :    Read-only file system
errno31 :    Too many links
errno32 :    Broken pipe
errno33 :    Numerical argument out of domain
errno34 :    Numerical result out of range
errno35 :    Resource deadlock avoided
errno36 :    File name too long
errno37 :    No locks available
errno38 :    Function not implemented
errno39 :    Directory not empty
errno40 :    Too many levels of symbolic links
errno41 :    Unknown error 41
errno42 :    No message of desired type
errno43 :    Identifier removed
errno44 :    Channel number out of range
errno45 :    Level 2 not synchronized
errno46 :    Level 3 halted
errno47 :    Level 3 reset
errno48 :    Link number out of range
errno49 :    Protocol driver not attached
errno50 :    No CSI structure available
errno51 :    Level 2 halted
errno52 :    Invalid exchange
errno53 :    Invalid request descriptor
errno54 :    Exchange full
errno55 :    No anode
errno56 :    Invalid request code
errno57 :    Invalid slot
errno58 :    Unknown error 58
errno59 :    Bad font file format
errno60 :    Device not a stream
errno61 :    No data available
errno62 :    Timer expired
errno63 :    Out of streams resources
errno64 :    Machine is not on the network
errno65 :    Package not installed
errno66 :    Object is remote
errno67 :    Link has been severed
errno68 :    Advertise error
errno69 :    Srmount error
errno70 :    Communication error on send
errno71 :    Protocol error
errno72 :    Multihop attempted
errno73 :    RFS specific error
errno74 :    Bad message
errno75 :    Value too large for defined datatype
errno76 :    Name not unique on network
errno77 :    File descriptor in bad state
errno78 :    Remote address changed
errno79 :    Can not access a needed sharedlibrary
errno80 :    Accessing a corrupted sharedlibrary
errno81 :    .lib section in a.out corrupted
errno82 :    Attempting to link in too manyshared libraries
errno83 :    Cannot exec a shared librarydirectly
errno84 :    Invalid or incomplete multibyte orwide character
errno85 :    Interrupted system call should berestarted
errno86 :    Streams pipe error
errno87 :    Too many users
errno88 :    Socket operation on non-socket
errno89 :    Destinationaddress required
errno90 :    Message too long
errno91 :    Protocol wrong type for socket
errno92 :    Protocol not available
errno93 :    Protocol not supported
errno94 :    Socket type not supported
errno95 :    Operation not supported
errno96 :    Protocol family not supported
errno97 :    Address family not supported byprotocol
errno98 :    Address already in use
errno99 :    Cannot assign requested address
errno100 :   Network is down
errno101 :   Network is unreachable
errno102 :   Network dropped connection onreset
errno103 :   Software caused connection abort
errno104 :   Connection reset by peer
errno105 :   No buffer space available
errno106 :   Transport endpoint is alreadyconnected
errno107 :   Transport endpoint is notconnected
errno108 :   Cannot send after transportendpoint shutdown
errno109 :   Too many references: cannot splice
errno110 :   Connection timed out
errno111 :   Connection refused
errno112 :   Host is down
errno113 :   No route to host
errno114 :   Operation already in progress
errno115 :   Operation now in progress
errno116 :   Stale NFS file handle
errno117 :   Structure needs cleaning
errno118 :   Not a XENIX named type file
errno119 :   No XENIX semaphores available
errno120 :   Is a named type file
errno121 :   Remote I/O error
errno122 :   Disk quota exceeded
errno123 :   No medium found
errno124 :   Wrong medium type
errno125 :   Operation canceled
errno126 :   Required key not available
errno127 :   Key has expired
errno128 :   Key has been revoked
errno129 :   Key was rejected by service
errno130 :   Owner died
errno131 :   State not recoverable
errno132 :   Operation not possible due toRF-kill
errno133 :   Unknown error 133
errno134 :   Unknown error 134
errno135 :   Unknown error 135
errno136 :   Unknown error 136
errno137 :   Unknown error 137
errno138 :   Unknown error 138
errno139 :   Unknown error 139

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: "格式字符串参数过多"。这是一个错误提示,通常出现在使用Python的字符串格式化函数时,传递的参数数量与格式字符串的占位符数量不匹配时。例如,如果格式字符串只有一个占位符,但是传递了多个参数,则会出现这个错误。解决方法是检查格式字符串和传递的参数数量是否匹配。 ### 回答2: "Too many arguments for format string" 是一种常见的 Python 错误信息,它指的是在字符串格式化时传递给 format() 方法的参数数量多于字符串的格式化占位符数量。 例如,在下面的代码,字符串 "{}, {} and {}" 有三个占位符,分别是 "{}",但 format() 方法却传递了四个参数: ``` >>> print("{},{} 和 {}。".format("苹果", "香蕉", "橘子", "柠檬")) TypeError: too many arguments for format string ``` 在这种情况下,Python 解释器会触发 "too many arguments for format string" 错误,因为有多一个参数没有占位符可以匹配。 要解决这个问题,我们可以通过移除多余的参数或添加足够数量的占位符来使形参和实参对应。例如,可以通过下面的代码解决上述例子的错误: ``` >>> print("{},{},{} 和 {}。".format("苹果", "香蕉", "橘子", "柠檬")) 苹果,香蕉,橘子 和 柠檬。 ``` 此外,如果您的字符串包含转义的大括号 ( {} ),可以在模板字面值前添加一个字面量 f 来代替 format() 方法,以避免出现此类错误。例如: ``` >>> fruit = '苹果' >>> print(f"我喜欢吃 {fruit}。") 我喜欢吃 苹果。 ``` 总之,"too many arguments for format string" 错误通常是由于传递给 format() 方法的参数数量与字符串占位符数量不匹配所导致的,解决方法是添加或删除参数或占位符,或尝试使用 f-string。 ### 回答3: “too many arguments for format string”是一个在编程经常出现的错误提示。这个错误通常发生在字符串格式化函数(如C语言的printf函数)。当我们使用格式化字符串的时候,我们需要指定字符串要替换的变量,但有时候我们会指定过多的参数,这就导致了出现这个错误。 例如,在C语言,我们使用%s格式化符来代表字符串,%d来代表整数。我们想要输出一个句子“我的名字是:xxx,年龄是:xx岁”,我们可以使用下面的代码: ``` char *name = "张三"; int age = 18; printf("我的名字是:%s,年龄是:%d岁", name, age); ``` 这个程序会成功输出“我的名字是:张三,年龄是:18岁”。但如果我们不小心多传入了一个参数,代码就会出现“too many arguments for format string”错误: ``` char *name = "张三"; int age = 18; int grade = 3; printf("我的名字是:%s,年龄是:%d岁", name, age, grade); ``` 这时候编译器就会抛出错误:“too many arguments for format string”,因为我们只有2个占位符,但输入了3个参数。 出现这个错误的原因通常是因为我们没有仔细检查format string的占位符和参数的数量是否匹配。解决这个错误的方法也很简单,只需仔细检查format string占位符和参数数量是否一致即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值