ページ 11

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さんが解説されている通りです。