0

検討、

int main()
{
 char s[10];
 strncpy(s,"hello",5);
 printf("Hello !!%s %d\n",s,strlen(s));
 return 0;
}

このプログラムを実行すると、何も出力されません。しかし、strncpy の呼び出しにコメントすると、"Hello !! 0" と表示されます。

使用された ideone (" http://ideone.com/j1cdKp ")

gcc コンパイラ (Debian 7.4) を使用すると、期待どおりの出力 ("Hello !!hello 6") が得られました。

誰でもこの動作を説明できますか?

-初心者

4

2 に答える 2

2

あなたのプログラムは未定義の動作を引き起こします。 sは初期化されてstrncpy(s,"hello",5);おらず、null ターミネータを含めるのに十分な文字をコピーしていません。

于 2014-03-31T15:22:25.120 に答える
2

パート1

このコードは、初期化されていない文字列を出力しようとするため、未定義の動作を引き起こしますs

char s[10];
printf("Hello!! %s %d\n",s,strlen(s));

パート2

このコードは、null で終了していない文字列を出力しようとするため、未定義の動作を引き起こします。strncpy指定された引数を使用すると、「hello」がコピーされますが、末尾の null ターミネータはコピーされません。

char s[10];
strncpy(s,"hello",5);
printf("Hello!! %s %d\n",s,strlen(s));

パート3

次のコードは正しいです。への引数strncpyはであることに注意してください6

char s[10];
strncpy(s,"hello",6);
printf("Hello!! %s %d\n",s,strlen(s));
于 2014-03-31T15:27:47.337 に答える