質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

3回答

878閲覧

C言語 ファイル内の文字読み込み

Waruzo

総合スコア5

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2022/08/15 08:56

編集2022/08/15 10:06

前提

C言語初心者です。至らない点あると思いますがお付き合いください。
_________________________________
*・ コ 
$!   ゙  "1ワ  $・ ・  <  "W   "G.
 !ス "  %Uヲ   #Kク    1ナ    Pス  マ ・ 6_  n・GNRMC,091806.00,A,5655.9691657,N,25476.5338632,E,0.022,,200622,,,
$GNGGA,086814.00,7898.9691674,N55828.5338632
$GNGSA,A,4,22,22,01,01,08,30,33,0
_________________________________
↑上のようなテキストファイルから必要な情報を書き出したいです。$○○○○以降の文字はそれぞれ先頭の文字ごとに決まった順番になっています。

実現したいこと

先頭の文字が$○○○○なら、以降1行を,ごとに区切って表示したいです。
例 A 5,3,21→年齢5歳、生まれ3月、日付21日  B 6,2→好きな数字6、嫌いな数字2

発生している問題・エラーメッセージ

まずはファイル内の文字を表示しようと思いサンプルコードを参考に実行したのですがエラーがでます。

エラーメッセージ ```重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態 エラー C4996 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. Satellite reading program C:\Users\81909\source\repos\Satellite reading program\Satellite reading program\Satellite reading program.cpp 11 ### 該当のソースコード #include <stdio.h> #include <stdlib.h> #define N 256 // 1行の最大文字数(バイト数) int main(void) { FILE* fp; // FILE型構造体 char fname[] = "GNSS.txt"; char str[N]; fp = fopen(fname, "r"); // ファイルを開く。失敗するとNULLを返す。 if (fp == NULL) { printf("%s file not open!\n", fname); return -1; } while (fgets(str, N, fp) != NULL) { printf("%s", str); } fclose(fp); // ファイルを閉じる return 0; } ```ここに言語名を入力 C∔∔ Visual Studio 2022

試したこと

どのような関数を使うのが的確かわかりません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

thkana

2022/08/15 09:38

C言語のお勉強が目的ですか? それとも、NMEAセンテンスを解析したくて、たまたま使える道具がVisualStudioだった、ということですか? (その座標がどこぞの高校...というのはまぁいいか)
Waruzo

2022/08/15 09:43

NMEAのセンテンスを解析が目的です。ご指摘ありがとうございます。
dodox86

2022/08/15 10:02

少なくとも現状ではC++には至らず、C言語ですね。タグも「C」にした方が良いのでは。そうでないとC++でしか使えないコードでも回答になり得ます。
Waruzo

2022/08/15 10:07

承知しました。ご指摘ありがとうございます。
guest

回答3

0

/sdl (追加のセキュリティ チェックの有効化)

このコンパイルオプションを外してください。
ソースコードの修正は不要になります。

Visual Studio 開発環境でこのコンパイラ オプションを設定するには

  1. プロジェクトの [プロパティ ページ] ダイアログ ボックスを開きます。 詳細については、Visual Studio での C++ コンパイラとビルド プロパティの設定に関するページを参照してください。

  2. [構成プロパティ]>[C/C++]>[全般] プロパティ ページを選択します。

  3. プロパティのドロップダウン コントロールを使用して、[SDL チェック] プロパティを設定します。 [OK] または [適用] を選択して、変更を保存します。

投稿2022/08/15 16:14

kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Waruzo

2022/08/16 11:19

助かります。ありがとうございます。
guest

0

ベストアンサー

kazuma_sさんの方法か、あるいは

fp = fopen(fname, "r"); // ファイルを開く。失敗するとエラーコードを返す。 if (fp == NULL) {

を機械的に

error_t err= fopen_s( &fp, fname, "r"); // ファイルを開く。失敗するとNULLを返す。 if (err != 0) {

で置き換えればこの場は乗り切れると思います。

ただし、C言語のお勉強の意図が無いのであれば、C言語ではなく、細かいことを気にしなくても済むPythonなどの利用をお勧めします。

投稿2022/08/16 09:36

編集2022/08/16 09:38
thkana

総合スコア7652

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Waruzo

2022/08/16 11:18

Pythonは聞いたことあるレベルでさわったことないです。C言語よりは理解しやすいのでしょうか。参考にします。コードまでわざわざすいません。ありがとうございます。
thkana

2022/08/16 11:29

理解しやすいというか、理解しなくて済むことが多いというか。 Cってとても「原始的」な、コンピュータの中身むき出しな言語なので、そこをちゃんと把握せずにいじるといろいろ変なことが起こったりもしますし。
Waruzo

2022/08/16 13:11

そうなんですね。承知しました。試してみようと思います。ありがとうございます。
guest

0

_CRT_SECURE_NO_WARNINGS でぐぐれば、ここらへんのことについての解説が出てきます
scanf などの(fopenも含めて)危険な関数については、VisualStudioでは使えないようになっています。
正式には、別に用意されたよりセキュアな関数を使おう、ということになってます

投稿2022/08/15 09:15

y_waiwai

総合スコア87784

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Waruzo

2022/08/16 11:16

ありがとうございます。参考にします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問