プロが教えるわが家の防犯対策術!

printf、scanf関数:標準入出力に対して使用
fprintf、fscanf:ファイルに対して使用
sprintf、vsprintf、sscanf:メモリに対して使用
とあるのですが、これらの関数の違いが分かりません。教えて頂けると幸いです。

質問者からの補足コメント

  • NULL文字とは、文字列を区切るものなのでしょうか?教えて頂けると幸いです。

    No.6の回答に寄せられた補足コメントです。 補足日時:2023/11/02 17:53
  • うーん・・・

    コンパイルは成功しました!ありがとうございました!ですが、質問のscanf関数がどういうものかというのが、いまいちつかめません。教えていただけると幸いです。

      補足日時:2023/11/07 03:29
  • うーん・・・

    迅速な回答大変恐縮です。すみませんが、3つほど教えて頂けると幸いです。以下の通りです。
    ①return 0は、0=成功、1=失敗の、0でしょうか?
    ②printfで、/nを使っていますが、なぜ、sprintfで、/nは間違いだと言ったのでしょうか?
    ③vsprintfは、sprintfや printfなどの関数と何が違うのでしょうか?

    No.2の回答に寄せられた補足コメントです。 補足日時:2023/11/07 20:17

A 回答 (39件中31~39件)

>例えば、abcdefgでNULL文字を使うと、gで切れて、1行空白空いて、hijkという風になるのかというのかという事です。



char data[20] = "abcdefghijk"; とすると
data[0] : 'a'
data[1] : 'b'
data[2] : 'c'
data[3] : 'd'
data[4] : 'e'
data[5] : 'f'
data[6] : 'g'
data[7] : 'h'
data[8] : 'i'
data[9] : 'j'
data[10] : 'k'
data[11] : '\0

となります。
この時、dataは、"abcdefghijk" であると判定されます。
ここで、
data[7] = '\0'を実行すると、(あなたがいうところの区切ると)

dataは、"abcdefg" となります。
data[8] 以降は、"ijk"となります。

このことをいっているのであれば、その通りです。
    • good
    • 0
この回答へのお礼

data[7]のところに、hが格納されているのですが。教えて頂けると幸いです。

お礼日時:2023/11/03 13:18

>char data[256];


>int num;
>num = 12345;
>sprintf(data,"number=%d\n",num);
>とすると、dataの内容は"number=12345\0" となります
>で、出力先が変数となるというのは、どんな感じに表示されるのでしょうか?

一点、誤りがありました。
sprintf(data,"number=%d\n",num);

sprintf(data,"number=%d",num);
の誤りでした。お詫びして訂正いたします。

どんな感じに表示されるのでしょうかということですが
表示されません。値(文字列)が、変数に設定されるだけです。
dataの内容を画面に表示するために
printf(data);
として、その行を実行した場合は、画面に
number=12345
と表示されます。
    • good
    • 0

>NULL文字とは、文字列を区切るものなのでしょうか?教えて頂けると幸いです。



「文字列を区切る」の意味が解く判りません。
文字列を区切るとは、どういうことでしょうか。
具体的に例をあげて説明していただけませんでしょうか。
    • good
    • 0
この回答へのお礼

例えば、abcdefgでNULL文字を使うと、gで切れて、1行空白空いて、hijkという風になるのかというのかという事です。教えて頂けると幸いです。

お礼日時:2023/11/02 20:48

>②の、’/0’は、どういう意味なのでしょうか?



文字列の終端を示す文字です。NULL文字とも呼ばれています。
下記URLを参照ください。
https://daeudaeu.com/c-nul-chara/
この回答への補足あり
    • good
    • 0
この回答へのお礼

sprintfはprintfと同様に文字、数字などを出力しますが出力先が画面ではなく変数になります。

char data[256];
int num;
num = 12345;
sprintf(data,"number=%d\n",num);
とすると、dataの内容は"number=12345\0" となります
で、出力先が変数となるというのは、どんな感じに表示されるのでしょうか?教えて頂けると幸いです。

お礼日時:2023/11/02 18:02

たまたま類似の機能で操作対象が違うので似通った名前を付けているだけの話です。

それぞれの関数の説明書を読んでください。説明書を読みさえすれば違いがわからないなどということはあり得ませんので、最低限その程度の努力をした上で質問をしてください。

また、より詳しく知りたければそれぞれの関数のソースコードを読んでください。printf()もvsprintf()もC言語で書かれていますし、中身を見れば関係性もわかるでしょう。
    • good
    • 0

>①その場合、そのファイルを事前にオープンしておく必要があるというのは、そのファイルを開いたままでということでしょうか?



について、質問の意味を誤解していました。(No3の回答は無視してください)
はい、そのファイルを開いたままで、fprintfもしくはfscanfを実行します。
ファイルはオープンされていないと、読み込み(fscanf)も書き込み(fprintf)もできません。
    • good
    • 0
この回答へのお礼

②の、’/0’は、どういう意味なのでしょうか?教えて頂けると幸いです。

お礼日時:2023/11/01 20:49

>①その場合、そのファイルを事前にオープンしておく必要があるというのは、そのファイルを開いたままでということでしょうか?



ファイル読み込み時、ファイルの終端に達した場合は、ファイルをクローズします。
ファイルへ出力時、書き込むデータがなくなった場合は、ファイルをクローズします。

②dataの内容は12345\0という所が分かりません。
"12345" の文字列と'\0'(16進数の0x00)がdataに格納されます。
data[0]='1'
data[1]='2'
data[2]='3'
data[3]='4'
data[4]='5'
data[5]='\0' (0x00)
になります。
    • good
    • 0
この回答へのお礼

ちなみに、scanf関数についてもう少し詳しく教えて頂けると幸いです。この関数を使うと、画面に何か出てくるのでしょうか?教えて頂けると幸いです。

お礼日時:2023/11/02 20:58

#include <stdio.h>



int main() {
int num;
printf("Input Number> "); /*①*/
scanf("%d", &num); /*②*/
printf("number=%d\n",num); /*③*/
return 0;
}
---------------------------------------
上記のプログラムを実行すると

①Input Number> が画面に表示されます。
②任意の数字(例では12345)を入力すると、その数字を読み込み、変数(num)に格納します。
③numを画面に表示します。

実行結果:
Input Number> 12345
number=12345

printfは、標準出力(画面)へ、文字、数字などを出力します。
scanfは、標準入力のデータ(キーボードから入力されたデータ)を読み込み、変数に格納します。

これが、「printf、scanf関数:標準入出力に対して使用」の意味です。

printfと同様にfprintfはファイルへ文字、数字などを出力します。
(その場合、そのファイルを事前にオープンしておく必要がありますが)
scanfと同様にfscanfはファイルから文字、数字などを読み込み、変数に格納します。
(その場合、そのファイルを事前にオープンしておく必要がありますが)
これが、「fprintf、fscanf:ファイルに対して使用」の意味です。



sprintfはprintfと同様に文字、数字などを出力しますが出力先が画面ではなく変数になります。

char data[256];
int num;
num = 12345;
sprintf(data,"number=%d\n",num);
とすると、dataの内容は"number=12345\0" となります。

vsprintfもprintfと同様に文字、数字などを出力しますが出力先が画面ではなく変数になります。
(例は省略)

sscanfはscanfと同様にデータを読み込み、読み込んだ内容を変数に格納しますが、
読み込み元は変数になります。

char data[256]="9876";
int num;
sscanf(data,"%d",&num); /*④*/
printf("number=%d\n",num);

④を実行すると、dataの内容が数値としてnumに格納されます。(num=9876)
これが、「sprintf、vsprintf、sscanf:メモリに対して使用」の意味です。
ここでいうメモリとは、変数であるdataとかnumのことを示しています。
この回答への補足あり
    • good
    • 0
この回答へのお礼

2つほど聞きたいのですが、①その場合、そのファイルを事前にオープンしておく必要があるというのは、そのファイルを開いたままでということでしょうか?
②dataの内容は12345\0という所が分かりません。
教えて頂けると幸いです。

お礼日時:2023/10/30 18:13

C言語に多少触れた程度のですが、printf、scanf関数は、モニタに出力する。

キーボードから入力する。
fprintf、fscanfは、テキストファイルとして出力する。テキストファイルから入力する意だと思います。テキストファイルになると、フォルダの指定も必要かと思います。メモリの方は分かりません。
    • good
    • 0
←前の回答 1  2  3  4

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A