-
関数レベルの静的変数はいつC/C ++で初期化されますか?
静的変数は、staticキーワードを使用して定義できます。これらは、プログラムの実行中にメモリに残る変数です。つまり、それらの存続期間はプログラムの実行全体です。これは自動変数とは異なり、関数が実行されているときにのみメモリに残り、関数が終了すると破棄されます。 関数レベルの静的変数は、最初に使用されるときに作成および初期化されますが、そのときのメモリはプログラムのロード時に割り当てられます。 Cで関数レベルの静的変数を示すプログラムは次のとおりです- 例 #include<stdio.h> int func() { static int num =
-
Cのポインタと配列の違い
違いを示すポインタと配列の詳細は次のとおりです。 ポインタ ポインタは、別の変数のアドレスを格納する変数です。メモリが変数に割り当てられると、ポインタは変数のメモリアドレスを指します。単項演算子(*)は、ポインター変数を宣言するために使用されます。 ポインタ宣言の構文は次のとおりです。 datatype *variable_name; ここで、datatypeはint、char、floatなどの変数のデータ型であり、variable_nameはユーザーが指定した変数の名前です。 ポインタを示すプログラムは次のとおりです。 例 #include <stdio.h> int m
-
Cで2D配列を動的に割り当てる方法は?
2D配列は、単一のポインターを使用してCで動的に割り当てることができます。これは、サイズrow * column * dataTypeSizeのメモリブロックがmallocを使用して割り当てられ、ポインタ演算を使用して行列要素にアクセスできることを意味します。 これを実証するプログラムは次のとおりです。 例 #include <stdio.h> #include <stdlib.h> int main() { int row = 2, col = 3; int *arr = (int *)malloc(row * col * sizeof(in
-
Cで2D配列をパラメーターとして渡す方法は?
2次元配列は、パラメータとしてCの関数に簡単に渡すことができます。両方の配列の次元がグローバルに指定されている場合にこれを示すプログラムは次のとおりです。 例 #include <stdio.h> const int R = 4; const int C = 3; void func(int a[R][C]) { int i, j; for (i = 0; i < R; i++) for (j = 0; j < C; j++) a[i][j] += 5; ; } in
-
Cで配列を作成するために使用できないデータ型
int、char、float、doubleなどのすべてのデータ型を使用して配列を作成できます。ただし、voidデータ型を使用して配列を作成することはできません。そうするとエラーが表示されます。 これを実証するプログラムは次のとおりです。 例 #include <stdio.h> #include <stdlib.h> int main() { void arr1[4]; printf("A void array"); return 0; } 出力 上記のプログラムは次の
-
複数行のC/C ++で長い文字列を書く方法は?
2つの二重引用符( )を使用して長い文字列を複数行に記述し、途中の任意の場所で文字列を分割することができます。 これをCで示すプログラムは次のとおりです。 例 #include <stdio.h> int main() { char *str = "This is the method " "to write long strings "
-
C /C++で範囲外の配列にアクセスする
Javaなどの言語では、 java.lang.ArrayIndexOutOfBoundsExceptionなどの例外 配列が範囲外にアクセスされた場合に発生する可能性があります。ただし、Cにはそのような機能はなく、配列が範囲外にアクセスされると、未定義の動作が発生する可能性があります。 これをCで示すプログラムは次のとおりです。 例 #include <stdio.h> int main() { int arr[] = {1,2,3,4,5}; printf("The elements of array : "
-
C / C ++でstrncpyが安全でないと想定するのはなぜですか?
関数strncpy()は、指定された文字数をソースから宛先にコピーするために使用されます。 以下はstrncpy()の構文です。 char *strncpy( char *destination, char *source, size_t n); ここで、destinationは、ソース文字列がコピーされる宛先配列へのポインタ、sourceはコピーされる文字列、nはソース文字列からコピーされる最大文字数です。 strncpy()関数は安全ではありません。これは、ソース文字列の最初のn文字でNULL文字が使用できない場合、宛先文字列がNULLで終了しないためです。 C ++でstrncp
-
C / C ++で配列インデックスがゼロから始まるのはなぜですか?
配列arr[i]は*(arr + i)として解釈されます。ここで、arrは、最初の配列要素または0インデックス要素のアドレスを示します。したがって、*(arr + i)は、配列の最初の要素からiの距離にある要素を意味します。したがって、最初はiが0であり、これは配列の最初の要素を意味するため、配列インデックスは0から始まります。 これをC++で示すプログラムは次のとおりです。 例 #include <iostream> using namespace std; int main() { int arr[] = {5,8,9,3,5}; &n
-
C条件文を使用せずに「偶数」または「奇数」を印刷するプログラム
このセクションでは、(<、 =、==)のような条件文を使用せずに、数値が奇数か偶数かを確認する方法を説明します。 条件文を使用することで、奇数または偶数を簡単に確認できます。数値を2で割って、余りが0かどうかを確認できます。 0の場合、それは偶数です。それ以外の場合は、数値と1を使用してAND演算を実行できます。答えが0の場合は偶数、それ以外の場合は奇数です。 ここでは、条件ステートメントを使用できません。奇数または偶数をチェックする2つの異なる方法が表示されます。 方法1 ここでは、文字列の配列を作成します。インデックス0の位置は「偶数」を保持し、インデックス1の位置は「奇数」を保持し
-
ループを使用せずに1から100までの数字を印刷するプログラム
ここでは、ループを一切使用せずに1から100までの数値を出力できるCプログラムを作成する方法を説明します。 この問題は、再帰を使用して解決できます。再帰的に呼び出される関数を作成します。再帰関数には基本的に2つのセクションがあることがわかっています。基本ケースと再帰呼び出しおよびその他の操作。この関数の基本ケースは、引数nが1より大きい場合です。1に達するまで、関数は再帰的に呼び出されます。これで、最後にnの値が出力されるため、システム全体で数値が生成されます。 サンプルコード #include<stdio.h> void generate_numbers(int n) {
-
「HelloWorld!」を印刷するCプログラムセミコロンを使用せずに
セミコロンを使用せずに「HelloWorld」というテキストを印刷できるCプログラムの作成方法を見てみましょう。 printf( Hello World);という行を使用して、テキストを簡単に記述できます。 main()関数で。 ただし、行末にはセミコロンがあります。セミコロンを避けるために、いくつかのトリックに従うことができます。 if条件内で同じprintf()ステートメントを使用できます。 printf()ステートメントはテキストの長さを返すため、ゼロ以外の値であるため、ifステートメントはtrueになります。したがって、テキストは画面に書き込まれます。 サンプルコード #inclu
-
Ctrl+Cを押しても終了しないCプログラムを作成する
このセクションでは、Ctrl+Cキーで終了できないプログラムをCで作成する方法を説明します。 Ctrl + Cはキーボード割り込みを生成し、現在のプロセスの実行を停止します。ここでCtrl+Cキーを押すと、メッセージが出力され、実行が続行されます。この機能を使用するには、Cでのシグナル処理手法を使用します。Ctrl+ Cを押すと、SIGINTシグナルが生成されます。次のリストには、他にもいくつかのシグナルとその機能があります。 信号 説明 SIGABRT 異常終了を示します SIGFPE 浮動小数点例外を示します SIGILL 無
-
フォーマット指定子を使用せずに文字を印刷するCプログラム
この記事では、フォーマット指定子を使用せずに一部の文字を印刷する方法を説明します。 Cのフォーマット指定子は、%d、%f、%cなどです。これらは、printf()関数を使用してCの文字と数字を印刷するために使用されます。 ここでは、%c形式指定子を使用せずに文字を印刷する別の方法を示します。これは、ASCII値を16進形式で直接入力することで実行できます。 サンプルコード #include <stdio.h> main () { printf("\x41 \n"); //41 is ASCII of A in Hex printf("\x
-
CIPアドレスを検証するプログラム
このプログラムでは、Cを使用してIPアドレスを検証する方法を説明します。IPv4アドレスはドット付き10進表記で表されます。 10進数は4つあります(すべて0から255の範囲です)。これらの4つの数字は3つのドットで区切られています。 有効なIPの例は次のとおりです:192.168.4.1 IPアドレスを検証するには、次の手順に従う必要があります ドット「。」を使用して文字列(IPアドレス)をトークン化します。区切り文字 サブ文字列に数値以外の文字が含まれている場合は、falseを返します 各トークンの数値が0〜255の範囲にない場合は、falseを返します 正確
-
PGM形式で画像を書き込むCプログラム
PGMはポータブルグレーマップです。 2D配列をPNG、JPEG、またはその他の画像形式の画像としてCに保存する場合は、ファイルに書き込む前に、指定された形式でデータをエンコードするために多くの作業を行う必要があります。 Netpbm形式は、簡単でポータブルなソリューションを提供します。 Netpbmはグラフィックプログラムのオープンソースパッケージであり、基本的にLinuxまたはUnixプラットフォームで使用されます。 MicrosoftWindowsシステムでも動作します。 各ファイルは2バイトのマジックナンバーで始まります。このマジックナンバーは、ファイルのタイプを識別するために使用
-
現在の時刻でデジタル時計を印刷するCプログラム
このセクションでは、Cを使用してデジタル時計を作成する方法を説明します。時間を操作するには、time.hヘッダーファイルを使用できます。このヘッダーファイルには、日付と時刻に関連する問題を処理するために使用されるいくつかの関数シグネチャが含まれています。 time.hの4つの重要な要素は次のとおりです size_t このsize_tは、基本的に符号なし整数型です。これはsizeof()の結果です。 clock_t これは、プロセッサ時間を保存するために使用されます time_t これは、カレンダーの時刻を保存するために使用されます struct tm
-
中空のピラミッドとダイヤモンドのパターンを印刷するCプログラム
ここでは、Cを使用して中空のピラミッドとダイヤモンドのパターンを生成する方法を説明します。中実のピラミッドパターンを非常に簡単に生成できます。中空にするために、いくつかのトリックを追加する必要があります。 中空ピラミッド 最初の行のピラミッドには1つの星が印刷され、最後の行にはn個の星が印刷されます。他の行の場合、行の開始と終了に正確に2つの星が印刷され、これら2つの開始の間に空白があります。 サンプルコード #include <stdio.h> int main() { int n, i, j; printf("En
-
Cホスト名とIPアドレスを表示するプログラム
このセクションでは、ローカルシステムのホスト名とIPアドレスを簡単に確認する方法を説明します。ホスト名とIPを見つけるためのCプログラムを作成します。 以下の関数のいくつかが使用されます。これらの機能には異なるタスクがあります。機能とそのタスクを見てみましょう。 関数 説明 gethostname() ローカルコンピュータの標準のホスト名を検索します。 gethostbyname() ホストデータベースからホスト名に対応するホスト情報を検索します iten_ntoa() IPv4インターネットネットワークアドレスをASCII文字列からドット付き10進形式に変換します。
-
構造体のsizeofがC/C ++の各メンバーのsizeofの合計と等しくないのはなぜですか?
sizeof()によって取得される構造体型要素のサイズは、必ずしも個々のメンバーのサイズと同じではありません。コンパイラは、配置の問題を回避するためにパディングを追加する場合があります。そのため、サイズが変わる場合があります。パディングは、構造体メンバーの後に、より大きなサイズのメンバーが続く場合、または構造体の最後に追加されます。コンパイラが異なれば、アライメント制約のタイプも異なります。 C標準では、全体的な配置構造は実装によって異なります。 ケース1 この場合、double zの長さは8バイトであり、x(4バイト)よりも大きくなります。そのため、別の4バイトのパディングが追加されます。