在C语言中,以下程序中的%5 %%, 但我不知道怎么做?
printf("%6%5%%%78%");
答案 0 :(得分:6)
这是未定义的行为,并且是特定于编译器/平台的。带有错误参数的Printf函数将开始从堆栈中翻译变量,然后发生任何事情。
这就是为什么编译器通常会抱怨这个
source.c:5:5: warning: conversion lacks type at end of format [-Wformat]
source.c:5:5: warning: conversion lacks type at end of format [-Wformat]
source.c:5:5: warning: conversion lacks type at end of format [-Wformat]
source.c:5:5: warning: spurious trailing '%' in format [-Wformat]
答案 1 :(得分:3)
Printf格式字符串后面应该跟有相同数量的参数,这显然没有在这里完成。
printf格式字符串的可能参数是:
%[flags][width][.precision][length]specifier
其中说明符是 s string , c char 等。其他是可选的。
对于左对齐或右对齐,标志是+, - ,0等中的一个,其中没有一个在问题中传递。
precision的前缀是。,所以在这个例子的情况下就是。
让我们来看看
printf("%6%5%%%78%");
现在%之后的第一个参数被视为字段的宽度,即6和 因此不打印。但是,它需要一个特定的后者 其中找到另一个%。标准说%后跟%打印它 到stdout。因此,您首先看到%打印。现在因为%的影响是 丢失,所以5被处理并打印为正常数字。
然后我们看到%%会打印一个%。接下来又是一个单一的 %,后跟78,预计为宽度,因此不打印。 然而,后一个%否定78的效果并打印a 单%。
要验证上述评估,这里是一个测试字符串
printf("%6%4%3%2");
按照上述规定打印%4%2。
详细参考 printf
答案 2 :(得分:0)
这里可能发生的事情是:
其他C实现中的行为会有所不同。该计划格式不正确;它不符合C标准,其行为未由C标准规定。