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

如何用C语言数组生成随机句子?程序报错及乱码问题排查

解决随机句子生成的报错/乱码问题

嘿,我一眼就瞅出你代码里的问题啦!为啥会报错或者输出乱码?核心原因是数组越界访问了!

问题分析

你定义的article、noun、verb、preposition这几个数组,每个都只有5个元素,对应的合法索引范围是0到4。但你生成随机索引的时候用了rand() % 6,这会生成0-5的随机数——当随机数抽到5的时候,就会去访问数组里根本不存在的第6个元素(数组索引从0开始),这属于未定义行为,结果就是要么报错,要么输出乱码。

修正方案

把所有rand() % 6改成rand() % 5就能解决基础问题!不过更稳妥的方式是动态计算数组长度,避免硬编码数字,以后修改数组元素数量也不用再改取模值,代码更健壮。

修正后的完整代码

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <time.h>
#include <string.h>

int main() {
    srand(time(NULL));
    
    // 定义各词类数组
    char *article[] = {"the" , "a" , "one" , "some", "any"};
    char *noun[] = {"boy" , "girl" , "dog" , "town", "car"};
    char *verb[] = {"drove" , "jumped" , "ran" , "walked", "skipped"};
    char *preposition[] = {"to" , "from" , "over" , "under", "on"};
    
    // 动态获取数组长度,避免硬编码数值
    int article_len = sizeof(article) / sizeof(article[0]);
    int noun_len = sizeof(noun) / sizeof(noun[0]);
    int verb_len = sizeof(verb) / sizeof(verb[0]);
    int prep_len = sizeof(preposition) / sizeof(preposition[0]);
    
    // 生成合法范围内的随机索引
    int r1 = rand() % article_len;
    int r2 = rand() % noun_len;
    int r3 = rand() % verb_len;
    int r4 = rand() % prep_len;
    int r5 = rand() % article_len;
    int r6 = rand() % noun_len;
    
    printf("%s %s %s %s %s %s\n", article[r1], noun[r2], verb[r3], preposition[r4], article[r5], noun[r6]);
    return 0;
}

额外说明

用sizeof(数组名)/sizeof(数组元素类型)的方式计算数组长度,是C语言里常用的小技巧——它会自动根据你数组里的元素数量计算出长度,以后你要是给某个数组加新的词,比如给noun加个cat,根本不用改后面的随机数生成代码,直接加元素就行,再也不用担心越界啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:47:25