-
C/C++でディレクトリ内のファイル一覧を取得する方法を解説
標準C++の制限とsystem関数を使う方法標準C++には、ディレクトリ内のファイル一覧を取得するための標準的な機能は用意されていません。しかし、system関数を使ってOSのシェルコマンドを呼び出すことで、簡易的に実現できます。以下は、Linux環境でls -lコマンドを実行する例です。コード例#include<iostream> int main () { char command[50] = ls -l; system(command); return 0; }出力結果-rwxrwxrwx 1 root root 9728 Feb 25 20:51
-
C/C++でコアダンプをデバッグする方法を徹底解説
コアダンプとは何か?プログラム内で異常が発生すると、オペレーティングシステム(OS)はそのプロセスを強制終了させると同時に、「コアダンプ」と呼ばれるファイルを出力します。コアダンプが発生する最も典型的な原因は、プログラムがNULLポインタや、割り当てられたメモリ領域外の無効なポインタ値にアクセスしたことです。クラッシュの際、OSは後から原因を解析できるように、その時点のメモリ内容などの情報をファイルへ書き出そうとします。このファイルこそが「コア」であり、これを活用することでプログラムの診断とデバッグが可能になります。コアダンプのデバッグ手順デフォルトでは、コアは /proc/sys/kerne
-
C/C++のセグメンテーション違反とは?主な原因と対処法を解説
セグメンテーション違反(Segmentation Fault)とはセグメンテーション違反(通称:セグフォルト)とは、プログラムがアクセスを許されていないメモリ領域にアクセスしようとした際に発生するエラーです。具体的には、OSがプログラムに割り当てたメモリ範囲を超えた領域を読み書きしようとしたときに起こります。このエラーが発生すると、OSはプログラムにSIGSEGVシグナルを送信し、通常はプログラムが強制終了されます。CやC++ではメモリを直接操作できるため、他の言語に比べてこの種のエラーが発生しやすいという特徴があります。セグメンテーション違反の主な原因セグメンテーション違反の多くは、ポインタ
-
C/C++のコンパイルとリンクの仕組みを徹底解説!3つのステップで理解するビルドプロセス
C++プログラムのビルド(コンパイル)は、大きく分けて「プリプロセス」「コンパイル」「リンク」という3つのステップで構成されています。それぞれの段階で何が行われているのかを正しく理解することは、コンパイルエラーやリンクエラーへの対処力を高めるうえで非常に重要です。ここでは、各ステップの役割と動作の流れを詳しく解説します。 1. プリプロセス(Preprocessing) 最初の段階では、Cプリプロセッサがソースコードに対して前処理を行います。プリプロセッサは、端的にいえば「テキスト置換ツール」のようなものであり、実際のコンパイル作業の前に必要な準備処理を実行するようコンパイラに指示します。 具
-
C/C++でセグメンテーション違反が発生する主な原因まとめ
セグメンテーション違反とはセグメンテーション違反(Segmentation Fault)は、プログラムが許可されていないメモリ領域にアクセスした際に発生する実行時エラーです。主な原因としては、初期化されていないメモリへのアクセス、プログラムに割り当てられた範囲外のメモリへのアクセス、文字列リテラルの変更試験などが挙げられます。これらの操作は必ずセグメンテーション違反を引き起こすとは限りませんが、多くの場合、プログラムの異常終了につながる危険な動作です。ここでは、C/C++開発でよく見られるセグメンテーション違反の代表的な原因を紹介します。 セグメンテーション違反の主な原因 1. 配列の範囲外ア
-
C言語で文字列を整数に変換する方法を解説
C言語で文字列から数値を抽出して整数に変換する手順C言語のプログラミングでは、文字列の中から特定の部分を取り出して整数に変換したい場面がよくあります。ここでは、映画タイトル「The Matrix(1999)」から公開年の「1999」を抽出し、整数として扱う方法を、3つのステップに分けてわかりやすく解説します。ステップ1:strchr()関数で左括弧「(」の位置を特定するまず、strchr()関数を使って、文字列内の左括弧「(」が最初に現れる位置へのポインタを取得します。これにより、括弧以降の文字列を簡単に操作できるようになります。char *name=The Matrix(1999); cha
-
C言語で文字列内の大文字・小文字・数字・空白・特殊文字を数える方法
C言語では、文字列を1文字ずつ走査しながら条件分岐を行うことで、大文字・小文字・数字・空白・特殊文字のそれぞれの出現回数を簡単にカウントできます。この記事では、その基本的な実装方法をサンプルコードとともに解説します。 文字種をカウントするC言語プログラム 以下のプログラムは、ユーザーが入力した文字列を解析し、大文字・小文字・数字・空白・特殊文字の個数をそれぞれ集計して表示します。 #include <stdio.h> int main(void) { char str[100]; int i; int upper = 0, lower = 0, numbe
-
C言語の変数とキーワードの基本をわかりやすく解説
C言語における変数とはC言語において、変数とは何らかのデータを格納するための「入れ物」であり、プログラム内で値を保持するための記憶領域です。変数の種類(データ型)によって必要なメモリ容量が異なり、それぞれに対してさまざまな操作が適用されます。変数名には命名ルールがあります。変数名は数字で始めることができません。使用できるのは英字、数字、アンダースコア「_」のみです。変数宣言の構文C言語で変数を宣言する基本構文は以下のとおりです。型 変数名;複数の変数を同時に宣言する場合は、カンマで区切って記述します。型 変数名1, 変数名2, 変数名3;変数の使用例次に、C言語における変数の具体的な使用例を示
-
C言語のトークンとは?キーワード・識別子・文字列の基礎を徹底解説
トークン(字句)とは、プログラムを構成する最小単位であり、コンパイラにとって意味を持つ要素のことです。C言語のソースコードは、これらのトークンの集まりとして解析されます。C言語のトークンには、主に「キーワード」「識別子」「定数」「文字列」「演算子」などの種類があります。ここでは、まずキーワードから順番に詳しく見ていきましょう。キーワード(予約語)キーワードは、C言語においてあらかじめ定義された予約語であり、それぞれが特定の機能や意味を持っています。これらの言葉を通じて、C言語の持つさまざまな機能を利用することができます。キーワードはコンパイラにとって特別な意味を持つため、変数名などの識別子とし
-
C言語のデータ型とは?主な種類・サイズ・範囲を実例付きで解説
C言語では、すべての変数にデータ型が紐づいています。データ型ごとに必要なメモリ容量が異なり、実行できる操作もそれぞれ決まっています。プログラミングの基礎となる重要な概念なので、しっかり理解しておきましょう。 C言語の主なデータ型 C言語でよく使われる基本的なデータ型は以下の4つです。 int − 整数値を格納するために使用します。 char − 1文字を格納するために使用します。 float − 単精度の浮動小数点数(小数)を格納するために使用します。 double − 倍精度の浮動小数点数(小数)を格納するために使用します。 データ型の一覧表(サイズと値の範囲) 次の表は、C言
-
C言語の型キャスト(型変換)とは?暗黙的変換と明示的変換をわかりやすく解説
型キャスト(型変換)とは、C言語においてあるデータ型を別のデータ型へ変換する手法のことです。 C言語の型キャストには、大きく分けて「暗黙的な型キャスト」と「明示的な型キャスト」の2種類があります。 1. 暗黙的な型キャスト(Implicit Type Casting) 暗黙的な型キャストは、コンパイラが自動的に行う変換です。1つの式の中で異なるデータ型の変数が混在して使用された場合、データの損失を避けるためにコンパイラが自動的にデータ型を変換します。 以下は、C言語における暗黙的な型キャストの例です。 サンプルコード #include <stdio.h> int main() {
-
C言語のsizeof演算子とは?基本的な使い方とサンプルコードを解説
sizeof演算子とはsizeof演算子は、C言語で最もよく使われる演算子の一つです。コンパイル時に評価される単項演算子であり、オペランドのサイズ(バイト数)を計算するために使用されます。sizeofは変数のサイズを返し、int型やfloat型といった基本データ型からポインタ型まで、あらゆるデータ型に適用することが可能です。データ型に対するsizeofの使い方sizeof()をデータ型に適用すると、そのデータ型に割り当てられるメモリ量(バイト数)を単純に返します。なお、実行結果は環境によって異なる場合がある点に注意してください。たとえば同じデータ型でも、32ビットシステムと64ビットシステムで
-
C言語のストレージクラス徹底解説|auto・extern・static・registerの違い
C言語では、変数や関数の可視性(visibility)やスコープ(scope)といった特性は、ストレージクラス(記憶クラス)によって定義されます。ストレージクラスを指定することで、その変数や関数がプログラムのどこからアクセス可能で、どの程度の期間メモリ上に存在し続けるのかが決まります。C言語のストレージクラスには、以下の4種類があります。自動変数(auto)外部変数(extern)静的変数(static)レジスタ変数(register)auto(自動変数)autoは、すべてのローカル変数に適用されるデフォルトのストレージクラスです。auto変数は関数が呼び出されたときに生成され、関数の実行が完
-
C言語の前置インクリメント(++)と前置デクリメント(--)演算子の違いと使い方
C言語におけるインクリメント演算子は変数の値を1つ増やすために使用され、デクリメント演算子はその逆で、変数の値を1つ減らすために使用されます。どちらもループ処理などで頻繁に使われる重要な演算子です。前置インクリメント・前置デクリメントの構文前置インクリメント演算子は、変数名の前に「++」を付けます。++variable_name;前置デクリメント演算子は、変数名の前に「--」を付けます。--variable_name;それでは、前置インクリメントと前置デクリメントの動作の違いを見ていきましょう。前置インクリメント(++i)とは前置インクリメントでは、変数に値が代入される前に、値が1つ増加します
-
C言語の「extern」キーワードとは?外部変数の基本と使い方を解説
externキーワードとは外部変数は「グローバル変数」とも呼ばれ、関数の外側で定義される変数のことです。外部変数はプログラム全体からアクセスでき、実行中のどの関数からでも参照したり、値を書き換えたりすることが可能です。「extern」キーワードは、こうした外部変数や関数を宣言・定義し、その可視範囲を広げるために使用されます。外部変数の基本特性スコープ:特定の関数に束縛されず、プログラム全体(グローバル)で有効です。デフォルト値:明示的に初期化しない場合、グローバル変数は自動的に0で初期化されます。生存期間:プログラムの実行が終了するまでメモリ上に保持されます。C言語のexternキーワードに関
-
【C言語】関係演算子と論理演算子の基本をサンプルコード付きで解説
関係演算子とは関係演算子(比較演算子)は、C言語において2つの値の大小関係や等価性を比較するために使用される演算子です。比較の結果、関係が成立していれば(真であれば)「1」を返し、成立していなければ(偽であれば)「0」を返します。if文などの条件分岐と組み合わせることで、プログラムの流れを制御する際に欠かせない存在となっています。C言語の主な関係演算子一覧演算子意味==等しい(左辺と右辺が一致する)>より大きい<より小さい!=等しくない>=以上(より大きい、または等しい)<=以下(より小さい、または等しい)注意点として、「等しい」を表すのは「==」(イコール2つ)であり
-
【初心者向け】C言語のビット演算子の種類と使い方を徹底解説
C言語のビット演算子とは ビット演算子とは、変数の値をビット単位で操作するための演算子です。C言語には、論理演算とシフト演算を中心に、以下の6種類のビット演算子が用意されています。 演算子名称 &ビットAND(論理積) |ビットOR(論理和) ^ビットXOR(排他的論理和) ~ビット補数(1の補数) <<左シフト >>右シフト 各演算子の動作 &(AND):対応する2つのビットが両方とも1のときに1を返します。 |(OR):対応するビットのどちらか一方でも1であれば1を返します。 ^(XOR):対応するビットが異なる場合に1を返します。 ~
-
C/C++のfseek()関数とは?ファイルポインタの移動方法を解説
C言語のfseek()関数は、ファイルポインタを任意の位置へ移動させるために使用されます。移動先は「オフセット(offset)」と「ストリーム(stream)」という引数で指定します。処理が成功した場合は0を返し、失敗した場合は0以外の値を返します。fseek()の構文int fseek(FILE *stream, long int offset, int whence)各引数の説明stream − 対象となるファイルストリームを識別するためのポインタです。offset − 基準位置から何バイト移動するかを指定します。whence − オフセットを加算する基準位置を指定します。whenceに指
-
C言語のftell()関数とは?使い方とファイルサイズの取得方法を解説
C言語のftell()関数とはC言語におけるftell()関数は、指定されたストリームの現在のファイル位置(ファイル先頭からのオフセット)を返す関数です。ファイルポインタをファイルの末尾に移動させた後にこの関数を呼び出すことで、ファイル全体のサイズを取得することができます。戻り値はlong int型であるため、32,767バイトを超えるデータを持つ大きなファイルのサイズも正しく扱うことが可能です。ftell()の構文long int ftell(FILE *stream)パラメータstream − ストリームを識別するFILEオブジェクトへのポインタです。ftell()の使用例ここでは、以下の
-
C言語のスコープルールとは?グローバル変数とローカル変数の基礎を解説
C言語における「スコープ」とは、プログラムの中で識別子や変数に直接アクセスできる範囲(有効範囲)のことを指します。スコープを正しく理解することは、バグの少ない読みやすいコードを書くための第一歩です。C言語のスコープルールは、大きく分けて以下の2つのカテゴリに分類されます。グローバル変数グローバル変数は、プログラム内のどの関数よりも外側で宣言・定義される変数です。プログラムが起動してから終了するまでの間、常に値を保持し続け、プログラム内のどこからでもアクセスすることができます。以下は、C言語におけるグローバル変数の使用例です。サンプルコード#include <stdio.h> int