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

C语言作业求助:双参数去空格函数代码异常排查

你的C语言代码存在这些问题,逐一修正即可正常运行

1. 二维数组定义错误

你定义的strings[1][101]只有1行,却在循环里尝试存储3个字符串(i从0到2),这会直接导致数组越界,触发未定义行为。应该改成char strings[3][101];,这样能容纳3个长度不超过100的字符串。

2. 主函数输出逻辑错误

  • 外层循环for(i = 0; i <= 0; i++)只执行一次,只能输出第一个字符串,要输出3个处理后的字符串,应该改成for(i = 0; i < 3; i++)。
  • 内层循环j <= 101会遍历到数组之外的内存(数组下标从0到100),还会输出大量空字符,正确的做法是循环到字符串结束符'\0'为止:for(j = 0; strings[i][j] != '\0'; j++)。

3. removeSpaces函数的核心错误

  • 变量j未初始化,直接使用会导致访问随机内存地址,必须初始化为j = 0;。
  • 赋值语句逻辑完全错误:你写的string2[i] = string1[j];搞反了索引用途——i是原字符串的遍历索引,j是目标字符串的存储索引,正确写法应该是string2[j++] = string1[i];。
  • 不能将同一个数组同时作为源和目标传入函数(removeSpaces(strings[i], strings[i]);):修改目标数组时会覆盖原数组的内容,导致后续遍历原字符串时拿到错误字符。可以用临时数组暂存原字符串,再传入函数处理。

4. 额外问题:fgets会读取换行符

fgets会把输入时的换行符'\n'也读进字符串里,如果作业要求只移除空格(不含换行),可以在存储前把换行符替换成结束符,避免后续处理时保留换行。


修正后的完整代码

#include <stdio.h>

void removeSpaces(char *string1, char *string2);

int main(){
    int i, j;
    char string[101], strings[3][101]; // 修正数组大小,容纳3个字符串

    for(i = 0; i < 3; i++){
        fgets(string, 101, stdin); // 读取长度设为101,避免截断

        // 处理fgets读取到的换行符
        for(j = 0; string[j] != '\0'; j++){
            if(string[j] == '\n'){
                string[j] = '\0';
                break;
            }
            strings[i][j] = string[j];
        }
        strings[i][j] = '\0';

        // 用临时数组暂存原字符串,避免处理时覆盖
        char temp[101];
        for(j = 0; strings[i][j] != '\0'; j++){
            temp[j] = strings[i][j];
        }
        temp[j] = '\0';
        removeSpaces(temp, strings[i]);
    }

    // 输出所有处理后的字符串
    for(i = 0; i < 3; i++){
        printf("处理结果%d: %s\n", i+1, strings[i]);
    }
}

void removeSpaces(char *string1, char *string2){
    int i = 0, j = 0; // 初始化目标字符串索引j

    for(i = 0; string1[i] != '\0'; i++){
        if(string1[i] != ' '){
            string2[j++] = string1[i]; // 正确的赋值逻辑
        }
    }
    string2[j] = '\0'; // 给目标字符串添加结束符
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 11:05:19