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

C语言字符串首字符删除功能失效求助(附代码)

代码问题分析与修复方案

你的代码存在三个关键问题,导致无法实现删除首字符的功能:

  • 函数调用传参错误:main里调用remfirst(&string[32])时,string[32]已经超出了数组的有效索引范围(数组string的索引是0到31),函数根本没拿到目标字符串的起始地址,自然无法修改原字符串。正确的传参应该是remfirst(string)(数组名本身就是首元素地址)或者remfirst(&string[0])。
  • printf参数冗余:printf("%s", &string)里的&string完全多余,直接传递string即可,数组名本身就代表首元素的地址,符合printf对%s参数的要求。
  • 循环条件越界:remfirst函数中的循环条件i <= strlen(arr)会导致越界访问:当i等于字符串长度时,arr[i+1]访问的是字符串结束符'\0'之后的内存,属于非法操作。正确的条件应该是i < strlen(arr),这样循环会把从第1个字符到最后一个有效字符依次前移一位,最后自动把'\0'移到合适的位置,完成字符串截断。

另外建议提前计算字符串长度,避免循环中反复调用strlen(每次调用都会遍历字符串,影响效率)。

修复后的完整代码:

#include <stdio.h>
#include <string.h>

void remfirst(char arr[]) {
    int len = strlen(arr);
    for(int i = 0; i < len; i++) {
        arr[i] = arr[i+1];
    }
}

int main() {
    char string[32];
    fgets(string, 32, stdin);
    remfirst(string);
    printf("%s", string);
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 14:35:03