无法获取字符串数组来复制一个随机值

标签 c arrays string

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]; 没有被注释掉,那么它不会做任何事情并将值留空。请帮忙!

最佳答案

nameArray 数组中只有 32 个字符串。但是当你这样做时:

int i = rand() % 33 + 1;

i 最高可达 33。因此,当 i 为 33 时,您将调用未定义的行为

你可能想要:

int i = rand() % 32;

在 C 中,记住数组索引从 0N-1。不是从 1 到 N。

还要确保在复制到 value 之前已经为其分配了内存。

关于无法获取字符串数组来复制一个随机值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14668965/

相关文章:

c - 在C中使用bash系统调用编写进行bash系统调用的C

c - 加密/解密文件 libgcrypt

php - 如何将数组值添加到关联数组的中间?

c++ - 删除动态分配的变量设置指针为 0

C 字符串数组

c - 有没有一种方法可以在少于 3 个系统调用的情况下测试文件结尾?

c - 尝试从 tun 接口(interface)获取超过 8 个队列文件描述符时 ioctl 失败

javascript - 扁平化奇数数组结构javascript

使用 sprintf() 函数后 C 字符字符串不可读

java - 给定一个字符串 s ,将字符串拆分为标记