C程序运行崩溃,无法实现单词转大写功能,求错误排查
代码错误排查与修复
核心错误点
- 返回值类型不匹配:
Uppercase函数声明返回char类型,但实际返回的是数组指针(C语言中数组名等价于首元素指针),指针被强制截断为单个字符,触发类型不匹配的未定义行为。 - 接收变量类型错误:
main函数中用char x接收返回值,单个char无法存储指针地址,后续printf("%s",x)会把x的字符值当作内存地址访问,直接导致内存越界崩溃。 - 循环终止逻辑不合理:原循环固定遍历100个元素,会处理字符串结束符
\0之后的垃圾数据,做无用功的同时可能意外修改内存内容。
修复后的代码
// 修改返回值类型为char*,匹配数组指针 char* Uppercase(char country[]){ int i; // 遍历到字符串结束符'\0'即停止,避免无效遍历 for(i=0; country[i] != '\0'; i++){ // 用字符常量替代ASCII码,提升代码可读性 if(country[i] >= 'a' && country[i] <= 'z'){ country[i] = 'A' + (country[i] - 'a'); } } return country; } int main(){ char country[100]; printf("Enter The Country Name: "); scanf("%s",country); // 用char*类型接收指针返回值 char* x = Uppercase(country); printf("Uppercase is: %s",x); return 0; // 补充main函数标准返回值 }
内容的提问来源于stack exchange,提问作者Nom
相关产品推荐
相关产品推荐

