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

使用const char组织字符串排序时出现strcmp、strcpy参数类型冲突问题

问题排查
  • 你遇到的const报错核心原因是逻辑错误:你要排序的是字符串指针数组,不需要复制字符串本身,直接交换数组中存储的指针地址即可。你调用strcpy会尝试修改const char*指向的只读字符串字面量,自然违反const修饰规则。
  • 临时变量类型错误:你定义的const char b是单个字符,无法存储字符串指针,应该改为const char* b用来暂存指针地址。
  • 数组越界错误:内层循环的边界写为a <= size,会访问到cities[10],而数组下标最大为size-1(也就是9),需要改为a < size。
  • 不必要的函数调用:strcmp本身参数要求是const char*,你传的数组元素完全符合要求,报错全部来自非法的strcpy调用,排序指针数组直接赋值交换指针即可,不需要使用strcpy。
修复后的完整代码
#include <stdio.h>
#include <string.h>
#define size 10

int main(void) {
    const char* cities[size] = { "Acushnet", "Dartmouth", "Fairhaven", 
            "Fall River", "Freetown", "Marion", 
            "Mattapoisett", "New Bedford", "Rochester", "Westport" };
    const char* b; // 暂存指针的临时变量
    for (int i = 0; i < size; i++) {
        for (int a = i + 1; a < size; a++) { // 修正边界避免越界
            if (strcmp(cities[i], cities[a]) > 0) {
                // 直接交换指针,不需要复制字符串内容
                b = cities[i];
                cities[i] = cities[a];
                cities[a] = b;
            }
        }
    }
    // 以下为排序结果验证代码,可按需保留
    for (int i = 0; i < size; i++) {
        puts(cities[i]);
    }
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 01:54:02