Beez Cガイド (LINK)%[]
がフォーマット指定子について語っていることは次のとおりです。
It allows you to specify a set of characters to be stored away (likely in an array of chars). Conversion stops when a character that is not in the set is matched.
この前提から生じるいくつかの基本的な質問を明確にしていただければ幸いです。
1)これらの 2 つの形式指定子によってフェッチされた入力はchar*
、文字配列または\0
終端文字 (文字列) を含む文字配列として (型の) 引数に格納されますか? 以下のプログラムのように、文字列を文字列としてフェッチし、特定の文字 (否定された文字セット内) に遭遇したときに停止したい場合、文字列ではない場合、文字列として格納するにはどうすればよいですか?
2)%[^|]
私のプログラムは、否定された文字が検出されたときに指定子の処理が停止することを示唆している|
ようです。を無視して|
使用したため、%*c
使用しましたが、テストしたところ%c
、タイプの追加の引数を使用するとchar
、文字|
が実際にその引数に格納されることがわかりました。
3)そして最後に、私にとって非常に重要なことですが、%s
書式指定子の文字配列を渡すことprintf()
と文字列 (NULL で終了する文字配列)を渡すことの違いは何ですか? character array vs string
) の%s
フォーマット指定子printf()
の場合、文字列と同じように出力されます。違いは何ですか?
//%[^] 指定子を説明するプログラム
#include<stdio.h>
int main()
{
char *ptr="fruit|apple|lemon",type[10],fruit1[10],fruit2[10];
sscanf(ptr, "%[^|]%*c%[^|]%*c%s", type,fruit1, fruit2);
printf("%s,%s,%s",type,fruit1,fruit2);
}
//文字配列 vs 文字列
#include<stdio.h>
int main()
{
char test[10]={'J','O','N'};
printf("%s",test);
}
出力 JON
//%*c の代わりに %c を使用
#include<stdio.h>
int main()
{
char *ptr="fruit|apple|lemon",type[10],fruit1[10],fruit2[10],char_var;
sscanf(ptr, "%[^|]%c%[^|]%*c%s", type,&char_var,fruit1, fruit2);
printf("%s,%s,%s,and the character is %c",type,fruit1,fruit2,char_var);
}
出力 fruit,apple,lemon,and the character is |