ページ 1 / 1
char *filedについて
Posted: 2009年10月02日(金) 16:16
by tama
こんにちは。
C言語は初心者です。WindowsのVistaを使っています。コンパイラはBorladです。
宣言文で次のように
char *field = "%s\t%s\t%s\t%s\t%s";
とあったのですが、"%s\t%s\t%s\t%s\t%s"の部分が分かりません。
ポインタfieldを宣言して、"%s\t%s\t%s\t%s\t%s"を代入する?
よろしければ、説明お願いします。
Re:char *filedについて
Posted: 2009年10月02日(金) 16:26
by 御津凪
> ポインタfieldを宣言して、"%s\t%s\t%s\t%s\t%s"を代入する?
それで正しいです。
"%s\t%s\t%s\t%s\t%s" の部分は文字列で、
中に書かれている暗号みたいな文字は printf 関数などで使われる書式文字と、エスケープシーケンスですね。
Re:char *filedについて
Posted: 2009年10月02日(金) 16:48
by zwi
正確に書くと
ポインタfieldを宣言して、文字列"%s\t%s\t%s\t%s\t%s"の先頭ポインタを代入するですかね。
Re:char *filedについて
Posted: 2009年10月02日(金) 18:53
by non
"%s\t%s\t%s\t%s\t%s"という文字列がメモリ上のどこか(恐らく静的領域)に用意されて、
その先頭のアドレスがfieldという変数に代入される。アドレスが入る変数をポインタという。
ポインタには指すという意味があるので、ポインタfieldは文字列"%s\t%s\t%s\t%s\t%s"の
先頭アドレスを指していると考えるとわかりやすい。
Re:char *filedについて
Posted: 2009年10月03日(土) 09:21
by Ma
まだまだ初心者の自分からの説明ですが、
%s は、書式文字で、
\t は、エスケープシーケンスです。
%s は、文字列。
\t は、タブを意味します。(他には、\n で改行など。)
printf(field,"te","st","in","g","now");
とすれば、
出力には、
te st in g now
と出力されます。
Re:char *filedについて
Posted: 2009年10月03日(土) 10:22
by tama
皆様、解答ありがとうございました。
ポインタfieldには先頭アドレスが入るのですね。
%s,%tはprintf()関数の中で見かけるのですが、
char *field = "%s%t…"; ----①
は初めて見ました。
printf()関数の場合は、%sは文字列を表示しますよね。
①の場合だと%sや%tは何をしているのでしょうか?
Re:char *filedについて
Posted: 2009年10月03日(土) 10:45
by zwi
%tではなく\tですね。
そのほかのことについては、Maさんが解説されている通りです。