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

C语言报错:expression must be a pointer to a complete object type求助

问题分析与代码修正

错误根源

  1. 参数传递不匹配:encrypt函数声明接收char*(单个字符串指针),但调用时传入kalimat[i][j][0]——这是单个字符,类型完全不符,直接触发指针类型错误。正确传参应为kalimat[i][j],它作为char[99]会隐式转换为char*。
  2. 数组访问逻辑错误:encrypt函数内把sentence(一维字符串指针)当成三维数组sentence[i][j][k]访问,完全违背变量类型定义,是报错的核心原因。
  3. 字符串复制非法:strcpy仅用于单个字符串复制,不能直接将三维数组kalimatBaru赋值给sentence,两者类型不兼容。
  4. 局部变量生命周期问题:kalimatBaru是encrypt内部的局部数组,函数执行完毕后会被销毁,无法作为有效数据传递给外部。

修正后的代码

假设需求是对每个单词按固定步长提取字符生成加密结果,调整后的代码如下:

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

// 修正encrypt:接收单个字符串,处理后修改原字符串
void encrypt(char *sentence) {
    int panjang = strlen(sentence);
    char kalimatBaru[99];
    int index = 0;

    // 按步长提取字符(可根据实际加密规则修改逻辑)
    for (int k = 0; k < strlen(sentence); k += panjang) {
        if (k < strlen(sentence)) {
            kalimatBaru[index++] = sentence[k];
        }
    }
    kalimatBaru[index] = '\0';
    // 将加密结果复制回原字符串
    strcpy(sentence, kalimatBaru);
}

int main() {
    int jumlahKalimat, jumlahKata, kataTerbanyak = 0;
    printf("Masukkan jumlah kalimat: ");
    scanf("%d", &jumlahKalimat);

    char kalimat[jumlahKalimat][99][99];

    for (int i = 0; i < jumlahKalimat; i++) {
        printf("Masukkan jumlah kata kalimat ke-%d: ", i + 1);
        scanf("%d", &jumlahKata);
        if (jumlahKata > kataTerbanyak) {
            kataTerbanyak = jumlahKata;
        }

        for (int j = 0; j < jumlahKata; j++) {
            scanf("%s", kalimat[i][j]);
        }
    }

    for (int i = 0; i < jumlahKalimat; i++) {
        printf("Kalimat ke-%d (encrypted): ", i + 1);
        for (int j = 0; j < kataTerbanyak; j++) {
            if (kalimat[i][j][0] != '\0') {
                // 修正传参:传入单个单词的指针
                encrypt(kalimat[i][j]);
                printf("%s ", kalimat[i][j]);
            }
        }
        printf("\n");
    }

    return 0;
}

核心修正点

  • 重构encrypt函数逻辑,针对单个字符串处理,用一维临时数组存储加密结果,避免三维数组的误用。
  • 修正encrypt调用传参,传入单个单词的指针kalimat[i][j]。
  • 修复字符串复制逻辑,确保strcpy仅用于合法的字符串间复制。

内容的提问来源于stack exchange,提问作者rayhan rangga yudha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 02:17:13