You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言随机姓名生成器修复后仍无法正常运行问题求助

问题根因

你遇到的两个异常都是基础的类型和内存使用错误导致的:

  • 数组元素数量不符:你用单个char类型变量cast1存储用户输入的数组长度,单字节char只能存0-255的数值,输入两位数以上长度直接溢出;同时循环判断条件写的是i<cast1,这里直接拿字符的ASCII编码值当循环上限(比如输入字符'3',ASCII值是51,循环会跑51次,但你实际申请的数组长度只有3),内存越界后读写混乱,自然读不到正确数量的元素。
  • 输出NULL/0:你定义的parr1是单字符数组,每个位置只能存1个字节,根本存不下完整的姓名字符串;再加上你用单个char变量tempchar接%s格式的字符串输入,写入时直接越界破坏栈内存,数组里存的内容完全被破坏,打印时自然出不来正确姓名。

除此之外代码还有两个隐性bug:一是rand()没有初始化随机种子,每次运行随机结果完全固定;二是while循环没有退出逻辑,一旦进入就会无限死循环。

修复后完整代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

#define MAX_NAME_LEN 32 // 定义单个名字的最大允许长度

int main()
{
    int i;
    int arr_len; // 直接用int类型存储数组长度,避免单char的转换、溢出问题

    printf("Choose array length: ");
    scanf("%d", &arr_len);
    // 定义二维字符数组:共arr_len个元素,每个元素可以存最长MAX_NAME_LEN-1的姓名
    char name_arr[arr_len][MAX_NAME_LEN];

    // 循环上限使用读入的合法长度值,保证存入元素数量和预期一致
    for(i = 0; i < arr_len; i++)
    {
        printf("Name to insert to array: ");
        // 直接读取姓名到数组对应位置,限制读取长度防止缓冲区溢出
        scanf("%31s", name_arr[i]);
    }

    int logic;
    char answer;

    printf("Would you like to generate a new name?[y1/n2]: ");
    scanf("%d", &logic);
    answer = (logic == 1) ? 'y' : 'n';

    // 初始化随机数种子,整个程序只需要初始化一次
    srand((unsigned int)time(NULL));

    while(answer == 'y')
    {
        int rand_idx = rand() % arr_len;
        // 用%s格式输出完整姓名字符串,而非%c输出单个字符
        printf("Random picked name: %s\n", name_arr[rand_idx]);

        // 增加继续询问逻辑,避免死循环
        printf("Generate another?[y1/n2]: ");
        scanf("%d", &logic);
        answer = (logic == 1) ? 'y' : 'n';
    }

    return 0;
}
关键修改说明
  • 把长度存储变量从单char改为int类型,直接用%d读取用户输入的长度值,循环判断直接使用读取到的合法长度,解决元素数量不符、内存越界的问题。
  • 把名字存储数组从一维单字符数组改为二维字符数组,每个数组位可以存储完整的姓名字符串,读取姓名时直接写入对应数组位,同时增加读取长度限制避免缓冲区溢出。
  • 新增随机数种子初始化逻辑,保证每次运行程序的随机抽取结果不同;输出格式从%c改为%s,正确打印完整姓名。
  • 给循环增加继续询问的判断逻辑,避免程序进入无响应的死循环。

内容的提问来源于stack exchange,提问作者anatolii123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 01:54:22