You need to enable JavaScript to run this app. C语言二维字符串数组排序飓风名称异常问题排查
优惠活动
大模型
产品
解决方案
定价
更多

C语言二维字符串数组排序飓风名称异常问题排查

问题排查结果
  • 核心故障:字符串交换逻辑完全错误,存在数组越界访问
    现有交换代码不符合C语言二维字符数组的操作规则:
    // 错误代码片段
    temp = list[index_of_min];
    list[index_of_min][LINE_LENGTH] = list[fill][LINE_LENGTH];
    list[fill][LINE_LENGTH] = *temp;
    
    1. 你定义的LINE_LENGTH为60,数组合法下标范围是0~59,访问[LINE_LENGTH]属于越界写操作,直接篡改了相邻字符串的头部内容,就是首字符异常的直接原因。
    2. C语言不能直接对数组名赋值,交换两个字符串需要用strcpy配合临时字符数组实现,不能用指针简单赋值。
  • 次要冗余/错误点
    1. main函数中读取完文件后重复打开拼写错误的hurricanes.cvs(正确后缀是csv),未关闭旧文件指针,属于资源泄漏,不过不直接影响排序结果。
    2. 定义的outp文件指针、num变量完全未使用,就是编译警告的来源。
修正后的核心代码

仅修改select_sort_str函数的交换逻辑即可,冗余代码可自行清理:

void
select_sort_str(char list[][LINE_LENGTH],   // 输入输出:待排序的字符串数组
                int n)          // 输入:待排序元素数量
{
    int fill,           // 下一个有序元素的存放下标
        index_of_min;   // 下一个有序元素的原始下标
    char temp[LINE_LENGTH]; // 改用临时数组存储字符串

    for (fill = 0; fill < n - 1; ++fill) {
        index_of_min = alpha_first(list, fill, n - 1);

        if (index_of_min != fill) {
            // 用strcpy完成字符串交换
            strcpy(temp, list[index_of_min]);
            strcpy(list[index_of_min], list[fill]);
            strcpy(list[fill], temp);
        }
    }
    for( int i =0; i<NUM_LINES; i++){
        printf("%s", list[i]);
    }
}

修正后运行即可得到按飓风名称字母序正确排序的结果,不会再出现字符被篡改的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 05:15:04