#include <stdio.h>
#include <string.h>
char lists[10][25];
char name[10];
void main()
{
scanf("%s" , lists[0]);
memcpy(name , lists[0], 25);
printf("%s\n" , name);
}
私のように入力を与えたとき、私は今10 として文字列「名前」のサイズを事前に定義しています:memcpy関数の動作についての説明は?上記のコードで
入力 -
abcdefghijklmnopqrstuvwxy私が得た出力が同じでした文字列:abcdefghijklmnopqrstuvwxy
私は出力を次のようにしてください:abcdefghij ???
配列のサイズが10に制限されていても、これはどのようになりますか?
これは*未定義の動作*の例です。これは何かが起こる可能性があることを意味します。それが必要な作業プログラムを含む。 – klutt
あなたのコードは非常に基本的なUBの線の外に色付けされています。あなたがそれを爆破してディスクを再フォーマットするには、より多くの色が必要です。 2つの変数宣言を入れ替えてみるとよいでしょう。 –
ほとんどの言語は、プログラマがあなたに配列の終わりを越えて書き込むのを防ぎます。 Cはしません。これを防ぐのはあなたの責任です。 – jarmod