C言語では、次のプログラムのうち%5 %%ですが、方法がわかりませんか?
printf("%6%5%%%78%");
これは未定義の動作であり、コンパイラ/プラットフォーム固有です。誤った引数を持つ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]
Printf形式の文字列の後には、ここでは明らかに行われていない同数の引数を続ける必要があります。
printfフォーマット文字列に使用できるパラメータは次のとおりです。
%[flags][width][.precision][length]specifier
ここで、指定子は文字列の場合はs、文字の場合はcなどです。その他はオプションです。
フラグは、左揃えまたは右揃えの+、-、0などのいずれかであり、いずれも質問に渡されません。
精度の前には。が付いているので、この例の場合は外れています。
見てみましょう
printf("%6%5%%%78%");
ここで、%の後の最初の引数はフィールドの幅、つまり6と見なされるため、出力されません。ただし、別の%を見つける代わりに、後者の指定子を期待します。標準では、%の後に%が続くとstdoutに出力されます。したがって、%が最初に印刷されます。%の効果が失われるため、5は正規数として扱われ、出力されます。
次に、単一の%を出力する%%が表示されます。次は再び単一の%で、その後に78が続きます。これは幅として期待されているため、印刷されません。ただし、後者の別の%は、78の効果を無効にし、単一の%を出力します。
上記の評価を検証するために、ここにテスト文字列があります
printf("%6%4%3%2");
上記に準拠して%4%2を出力します。
詳細なリファレンス printf
ここで起こりそうなことは次のとおりです。
他の C 実装では動作が異なります。プログラムの形式が正しくありません。C 標準に準拠しておらず、その動作は C 標準で指定されていません。