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

字符串逆序拷贝至数组时出现exit status 116错误,求原因

嘿,我来帮你排查代码里的问题啦!你遇到的exit status 116其实是内存访问越界引发的错误,咱们一步步拆解问题根源:

核心错误分析

1. 空数组定义非法

你写的char notreversed[] = {};是不符合C语言规范的:局部数组不能定义为空(既没有元素也未指定大小)。当你用scanf("%s", notreversed)写入字符串时,会直接越界覆盖内存中的其他数据,这是导致程序崩溃的核心原因之一。

2. 数组索引越界

循环里的reversed[i] = notreversed[length-i];存在索引错误:C语言字符串的索引从0开始,比如长度为4的"stop",有效索引是0到3。当i=0时,length-i等于4,已经超出了原数组的最大索引,属于非法内存访问,会读取垃圾数据甚至触发错误。正确的索引应该是length - 1 - i。

3. 缺少字符串终止符

C语言的字符串必须以'\0'结尾,但你定义的reversed[length]只分配了和原字符串等长的空间,循环结束后没有手动添加终止符。printf("%s")会一直读取内存直到遇到'\0',这会导致不可预料的行为。

修正后的代码
#include <stdio.h>
#include <string.h>
int main(){
    // 定义足够大的固定大小数组,避免输入越界
    char notreversed[100];
    int i, length;
    // 限制读取字符数,防止超出数组容量
    scanf("%99s", notreversed);
    length = strlen(notreversed);
    // 多分配1个空间存储字符串终止符
    char reversed[length + 1];
    for(i=0; i<length ; i++ ){
        reversed[i] = notreversed[length - 1 - i];
    }
    // 添加字符串终止符,确保printf能正确识别
    reversed[length] = '\0';
    printf("%s\n", reversed);
    return 0;
}
额外小提示
  • 如果需要处理超长字符串,可以改用动态内存分配(malloc和free)替代变长数组,兼容性更好。
  • 始终注意输入边界,用scanf("%99s")这种方式限制读取长度,能有效避免内存越界问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 19:53:10