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

如何定位指针数组中的字符指针?指针反转字符数组报错求助

问题解决:字符数组指针反转的错误修复

1. 类型不匹配错误的修复

你遇到的cannot convert 'char (*)[5]' to 'char*'错误,是因为&name的类型是指向长度为5的char数组的指针(char (*)[5]),而你要赋值给的p是指向单个char的指针(char*),两者类型不兼容。

正确的初始化方式是直接用数组名:

char *p = name;

数组名name在表达式中会自动退化为指向数组第一个元素的指针,类型正好是char*,和p匹配。

2. 输入只读取2个值的问题解决

当你去掉&后,输入时只读取2个值就执行反转,是因为scanf("%c", p)会读取输入中的空白字符(包括回车、空格)。比如你输入第一个字符后按回车,回车会被当作第二个字符被读取,导致后续循环读取到的都是空白,看起来像只读取了2个值。

修复方法是在%c前加一个空格,让scanf自动跳过所有空白字符:

scanf(" %c", p);

3. 完整修复后的代码

#include <stdio.h>

int main() {
    char name[5];
    char *p = name; // 正确初始化指针
    int i;

    printf("Enter the array: ");
    for(i = 0; i < 5; i++) {
        scanf(" %c", p); // 加空格跳过空白字符
        p++;
    }

    p--; // 此时p指向最后一个元素的下一位,先减1回到最后一个元素
    for(i = 0; i < 5; i++) {
        printf("%c", *p);
        p--;
    }
    printf("\n"); // 输出换行,让结果更整洁
    return 0;
}

额外说明

  • 反转循环中,第一个p--是必要的:因为第一个循环结束后,p已经指向数组第5个元素的下一位(数组索引从0到4,共5个元素),所以需要先减1才能指向最后一个有效元素。
  • 如果输入时不想逐个输入字符,也可以用scanf("%s", name)直接读取字符串,但要注意数组长度(这里name长度为5,最多读取4个字符加结束符'\0'),不过你的需求是读取5个字符,所以逐个读取更合适。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 23:27:04