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

C程序检测句中首尾同字母单词,p2未初始化报错及优化求助

C语言检测首尾相同单词问题修复方案

报错「uninitialized local variable 'p2' used」原因

你定义了字符指针p2后,没有给它赋值任何有效的内存地址就直接执行*p2 = arr[i--]解引用操作,属于野指针访问,不仅会触发编译警告,运行时也大概率直接崩溃。
除此之外你的代码还存在大量逻辑错误,远不止指针未初始化这一个问题,下面直接给出修复后的可运行代码和改进建议。

现有代码核心问题汇总

  • 变量i未初始化,输入循环直接用i++会把内容写到数组随机位置
  • 字符串结束符错误:arr[i] = '0'是字符0,正确的字符串结束符是'\0'
  • 指针用法完全错误:p1、p2是用来指向单词首尾地址的,你直接给*p1赋值相当于修改原数组内容,完全偏离需求
  • 比较逻辑写错:if (*p1 = *p2)是赋值操作,相等判断需要用双等号==
  • 循环逻辑混乱:查找单词的循环里反复修改i的值,会导致数组越界、单词拆分错误
  • 输出逻辑错误:匹配到符合要求的单词时直接打印整个数组,而不是打印当前匹配的单词

修复后可运行代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define MAX 100

int main()
{
    // 如果不需要切换编码可以删掉这行,中文环境建议用chcp 65001支持中文输入
    system("chcp 65001");
    char arr[MAX] = {0}; // 初始化数组
    int i = 0, sym;
    printf("\n\t 请输入句子(输入.或者回车结束输入):");
    // 读取输入
    while ((sym = getchar()) != '.' && sym != '\n' && i < MAX - 1)
    {
        arr[i++] = sym;
    }
    arr[i] = '\0'; // 补字符串结束符

    char *start = arr; // 指向单词开头的指针
    while (*start != '\0')
    {
        // 跳过开头的分隔符(空格、逗号等非字母字符)
        while (*start != '\0' && !isalpha(*start))
        {
            start++;
        }
        if (*start == '\0') break;

        // 找到单词结尾
        char *end = start;
        while (*end != '\0' && isalpha(*end))
        {
            end++;
        }
        end--; // 回退到最后一个字母的位置

        // 判断首尾字母是否相同(要区分大小写的话去掉tolower转换即可)
        if (tolower(*start) == tolower(*end))
        {
            // 打印当前单词
            printf("匹配到首尾相同的单词:");
            for (char *p = start; p <= end; p++)
            {
                putchar(*p);
            }
            putchar('\n');
        }

        // 跳到下一个单词的起始位置
        start = end + 1;
    }

    return 0;
}

代码改进建议

  • 可自定义匹配规则:如果要过滤长度为1的单词,加上if (end - start + 1 < 2) continue;判断即可
  • 功能拆分:可以把判断单词首尾相同的逻辑封装成独立函数,提高代码复用性
  • 增加异常处理:可以判断输入是否为空、输入长度是否超出数组限制,给出友好提示
  • 兼容更多场景:如果需要支持中文单词,替换字母判断逻辑为中文编码判断即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 06:57:02