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

Jaden字符串大小写转换代码触发SIGSEGV错误,请求问题排查

代码问题分析及修复方案

你的代码能完成大部分单词首字母大写的功能,但触发SIGSEGV(无效内存访问)的原因主要有以下几点:

  • 未处理string为NULL的情况:当测试用例传入空指针作为string参数时,代码第一行直接解引用NULL指针,这属于C语言未定义行为,会直接触发内存访问错误。
  • 未检查jaden_case是否为NULL:如果调用者传入的jaden_case是空指针,写入该指针指向的内存同样会导致无效内存访问。
  • 潜在的内存越界风险:若string长度超过jaden_case的分配空间,写入jaden_case + i时会越界访问内存,也可能触发SIGSEGV。

修复后的代码

#include <string.h>

char *to_jaden_case(char *jaden_case, const char *string) {
    // 检查空指针
    if (jaden_case == NULL || string == NULL) {
        return jaden_case;
    }
    
    size_t len = strlen(string);
    // 处理空字符串
    if (len == 0) {
        jaden_case[0] = '\0';
        return jaden_case;
    }
    
    // 处理第一个字符
    if (string[0] >= 'a' && string[0] <= 'z') {
        jaden_case[0] = string[0] - 32;
    } else {
        jaden_case[0] = string[0];
    }
    
    // 处理后续字符
    for (size_t i = 1; i < len; i++) {
        if (string[i-1] == ' ' && string[i] >= 'a' && string[i] <= 'z') {
            jaden_case[i] = string[i] - 32;
        } else {
            jaden_case[i] = string[i];
        }
    }
    // 添加字符串结束符
    jaden_case[len] = '\0';
    
    return jaden_case;
}

修复说明

  1. 增加空指针检查,避免解引用空指针导致崩溃。
  2. 使用strlen获取字符串长度,逻辑更清晰,同时处理了空字符串场景。
  3. 改用size_t作为循环变量,避免int类型处理超长字符串时的溢出问题。
  4. 统一字符判断逻辑,提升代码可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 06:01:27