使用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
相关产品推荐
相关产品推荐

