Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C / C ++でstrncpyが安全でないと想定するのはなぜですか?


関数strncpy()は、指定された文字数をソースから宛先にコピーするために使用されます。

以下はstrncpy()

の構文です。
char *strncpy( char *destination, char *source, size_t n);

ここで、destinationは、ソース文字列がコピーされる宛先配列へのポインタ、sourceはコピーされる文字列、nはソース文字列からコピーされる最大文字数です。

strncpy()関数は安全ではありません。これは、ソース文字列の最初のn文字でNULL文字が使用できない場合、宛先文字列がNULLで終了しないためです。

C ++でstrncpy()を示すプログラムは次のとおりです。

#include <iostream>
#include <cstring>
using namespace std;
int main () {
   char source[20] = "This is a string";
   char dest[20];
   strncpy(dest, source, 4);
   cout << "The destination string is: " << dest;
   return 0;
}

出力

上記のプログラムの出力は次のとおりです。

The destination string is: This

上記のプログラムを理解しましょう。

ソース文字列には、「これは文字列です」というデータが含まれています。次に、strncpy()を使用して、最初の4文字を宛先文字列にコピーします。次に、宛先文字列の内容が出力されます。これを示すコードスニペットは次のとおりです。

char source[20] = "This is a string";
char dest[20];
strncpy(dest, source, 4);
cout << "The destination string is: " << dest;

  1. C言語のstrncpy()関数とは何ですか?

    Cライブラリ関数char* strncpy(char * dest、const char * src、size_t n) src が指す文字列から、最大n文字をコピーします 宛先へ 。 srcの長さがnの長さよりも短い場合、destの残りの部分はnullバイトで埋められます。 文字の配列は文字列と呼ばれます。 宣言 以下は配列の宣言です- char stringname [size]; 例-charstring[50];長さ50文字の文字列 初期化 単一文字定数の使用- char string[10] = { ‘H’, ‘e’, &l

  2. C /C++で文字列を反転します

    これはC言語で文字列を逆にする例です 例 #include<stdio.h> #include<string.h> int main() {    char s[50], t;    int i = 0, j = 0;    printf("\nEnter the string to reverse :");    gets(s);    j = strlen(s) - 1;    while (i < j) { &n