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

C语言多文件随机字符串生成程序输出乱码如何解决?

C语言随机字母字符串生成乱码问题修复方案

问题根因

  • generateChars函数的for循环末尾多写了多余分号,导致循环逻辑空转,仅在循环结束后给myarr[len]赋值了1次,前len个位置的栈内存完全未初始化,输出时就会出现固定乱码符号╠
  • 未初始化随机数种子,每次程序运行生成的随机字符串完全相同
  • offsetChars函数逻辑冗余且判断顺序错误:z的特殊判断放在了普通字符判断之后,会导致z先被赋值为z+1(即字符{),无法正确转为a
  • 主函数传递数组参数时不需要加&取地址符,数组名本身就是指向首元素的指针,原写法不规范

修复后完整代码

mysource.h

// 增加头文件保护避免重复引入
#ifndef MYSOURCE_H
#define MYSOURCE_H

void generateChars(char *myarr, int len);
void offsetChars(char *myarr, int len);
void printChars(char *myarr, int len);

#endif

mysource.c

#include <stdio.h>
#include <stdlib.h>
#include "mysource.h"

void generateChars(char* myarr, int len)
{
    int i = 0;
    char letters[26] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
    // 移除for循环末尾多余分号
    for (i = 0; i < len; i++)
    {
        myarr[i] = letters[rand() % 26];
    }
}

void offsetChars(char *myarr, int len)
{
    int j;
    for (j = 0; j < len; j++)
    {
        // 简化逻辑,无需嵌套循环
        if (myarr[j] == 'z')
        {
            myarr[j] = 'a';
        }
        else
        {
            myarr[j] += 1;
        }
    }
}

void printChars(char *myarr, int len)
{
    int i;
    for (i = 0; i < len; i++)
    {
        printf("%c", myarr[i]);
    }
}

myMain.c

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "mysource.h"

int main()
{
    int n;
    // 初始化随机数种子,保证每次运行生成不同的字符串
    srand((unsigned int)time(NULL));

    printf("How many random characters do you want to generate?: ");
    // 注意:如果编译器不支持scanf_s可替换为scanf("%i", &n);
    scanf_s("%i", &n);
    if (n >= 1024)
    {
        printf("输入长度不能超过1023");
        return 1;
    }

    char myarr[1024] = {0};
    printf("\nOriginal Combo:\n");
    // 直接传数组名,无需取地址
    generateChars(myarr, n);
    printChars(myarr, n);

    printf("\nOffset Combo:\n");
    offsetChars(myarr, n);
    printChars(myarr, n);

    return 0;
}

编译运行说明

  • 编译时将mysource.c和myMain.c加入同一编译目标即可,完全符合双源文件的项目要求
  • 输入长度建议不超过1023,避免数组越界

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 07:15:01