1
void getName(char* value)
{

  const char *nameArray[] = { "bob", "billy", "jimbob", "boba fett", "chuck norris", "jimmy", "craig",
        "howard", "leonard", "raj", "sheldon", "penny", "jenny", "sean", "amy", "bernadette",
        "matthew", "olga", "ryan", "suanne", "darth vader", "luke", "spock", "kirk", "picard",
        "michele", "randy", "suanne", "bruce lee", "garrett", "sophie", "gloria"};

  int i = rand() % 33 + 1;

  strcpy(value, nameArray[i]);
  //value = nameArray[i];
}

この配列からランダムな名前を取得して値に格納しようとしています。デバッグしたところstrcpy、プログラムがクラッシュすることがわかりました。strcpyコメントアウトされていてコメントアウトされていない場合value = nameArray[i];は、何もせず、値を空のままにします。助けてください!

4

1 に答える 1

4

配列には 32 個の文字列しかありませんnameArray。しかし、あなたがするとき:

int i = rand() % 33 + 1;

i33まで行くことができます。したがって、が33の場合、未定義の動作iが呼び出されます。

あなたはおそらく欲しい:

int i = rand() % 32;

C では、配列インデックスが から0まで変化することを覚えておいてN-1ください。1 から N までではありません。

valueまた、コピーする前に、メモリが割り当てられていることを確認してください。

于 2013-02-03T02:50:06.800 に答える