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

C语言字符串程序运行报错求助:HackerRank30天挑战遇问题

嘿,刚入坑编程就敢冲HackerRank的30天挑战,给你点个赞!不过C语言的字符串确实容易踩坑,我来给你捋捋这类程序最常出的几个问题,你可以对着自己的代码排查下:

常见C语言字符串存储程序错误排查点
  • 内存分配/越界问题:
    这是新手最常犯的错!如果你直接写char *str就想存输入,str是个野指针,指向的内存根本不属于你,写入肯定会触发错误;或者用了固定大小的数组(比如char str[10]),但输入的字符串长度超过了数组能容纳的范围(还要留位置给字符串终止符\0),就会导致内存溢出,出现奇怪的输出甚至程序崩溃。
    正确的写法参考:

    // 方式1:用足够大的固定数组(确保能装下输入+'\0')
    char str[100];
    scanf("%s", str); // 适合无空格的输入
    
    // 方式2:动态分配内存(更灵活)
    char *str = malloc(100 * sizeof(char));
    if (str == NULL) {
        printf("内存分配失败!");
        return 1;
    }
    scanf("%s", str);
    // 使用完记得释放内存
    free(str);
    
  • 忘记加字符串终止符\0:
    C语言里的字符串必须以\0结尾才能被正确识别。如果你是手动通过循环读入字符(比如用getchar()),一定要在最后手动加上这个终止符,不然打印或处理字符串时会出现乱码。示例:

    char str[5];
    for (int i = 0; i < 4; i++) {
        str[i] = getchar();
    }
    str[4] = '\0'; // 这行绝对不能少!
    
  • 输入处理不匹配需求:
    如果你的输入包含空格,用scanf("%s")只会读到第一个空格就停止,这时候得用fgets()来读取整行输入:

    char str[100];
    fgets(str, sizeof(str), stdin);
    // 注意:fgets会把换行符也读进字符串里,要是不需要可以手动去掉
    str[strcspn(str, "\n")] = '\0';
    
  • 格式符使用错误:
    打印字符串时用了%d(整数格式符)而不是%s,或者读入时格式符和变量类型不匹配,都会导致离谱的输出或运行错误。

要是你能把具体代码、测试输入、预期输出和实际报错信息/输出贴出来,我就能更精准地帮你定位问题啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:07:15