ここから本文です

いつも、お世話になっております。 うーん。

pon********さん

2019/8/2308:52:23

いつも、お世話になっております。

うーん。

sprintfは、1行全部、読み取れると訊いていたのですが、
使ってみると、
例えば、
あるファイルで、
aaaa bbbb cccc
dddd eeee ffff
とあると、
char Buf1[250];
char Buf2[250];
FILE *fp;
として、
そのファイルをfopenした後、
sprintf(fp, "%s", Buf1);
sprintf(fp, "%s", Buf2);
とした場合、
当然,Buf1には、
aaaa bbbb ccccが、
Buf2には、
dddd eeee ffffが、
入って来ることを期待したのですが、
printfなどで、確認すると、
Buf1には、最初のスペースの区切りまでの
aaaaしか
Buf2には、2番目のスペースの区切りまでの
bbbbしか取り込んでいないのです。
これでは、私の組んだプログラムでは、
スペースなしの文章だと、使えず、何故かなあ、と思いまして。
私の、ちょっとしたミスやオプション入れずだとは思うのですが、
どなたか、お教えいただけると、幸いです。

閲覧数:
48
回答数:
2

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

n2q********さん

編集あり2019/8/2309:21:45

まず、以下を確認しますよ。


《読み込み用の関数》

fscanf ファイルから読む
sscanf 文字列を解釈

fgets ファイルから1行読む


《書き込み用の関数》

fprintf ファイルに書く
sprintf 文字列を作成

fputs ファイルに書く



【sprintfは、1行全部、読み取れると訊いていたのですが】

いや、そうではないです。

1行全部読み取れる場合があるのは fgets になります。(領域が足りない場合は1行全部とはならずに途中までとなります。)



【そのファイルをfopenした後、sprintf(fp, "%s", Buf1);sprintf(fp, "%s", Buf2);とした場合、】

fprintf の書き間違いに見えますが、でもそれは書き込み用です。


【確認すると、Buf1には、最初のスペースの区切りまでの aaaaしか Buf2には、2番目のスペースの区切りまでの bbbbしか取り込んでいない】

お話からは fscanf が使用されているように感じました。fgets の使用を検討してみてください。ただし、1行全部読み取れた時は末尾に改行が含まれていますので、適宜取り除くなどしてください。

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜1件/1件中

mer********さん

2019/8/2401:04:01

sscanfの話だとして、%sの機能は

https://linuxjm.osdn.jp/html/LDP_man-pages/man3/scanf.3.html
>ホワイトスペースではない文字で構成された文字列に対応する。
(中略)
>文字列の入力は、ホワイトスペースが入力されるか、最大フィールド幅に 達するか、のどちらかが起こると停止される。

です。
「1行全部」とは限りません。

>2番目のスペースの区切りまでの
>bbbbしか取り込んでいないのです。

sscanfはそういうものです。

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる