Classyyy 2022-05-17 23:08 采纳率: 40%
浏览 22
已结题

C语言的函数问题(涉及字符指针)

#include <stdio.h>                                    
    int main()
    {
        void change(char p[]);
        char a[] = "I am a girl.";
        change(a);
        printf("%s\n", a);
    return 0;
    }
    void change(char *p)
    {
        p = "I am a boy.";
        *p = 'Y';
        printf("%s\n", p);
    }

以上代码是会报错的,因为倒数第三行有问题,为什么呢?如果删去倒数第四行,程序就能正常运行。那么倒数第三行和倒数第四行一起出现为什么会出现问题呢?在这个函数里,改变p的指向为“I am a boy.”,并利用这个"I am a boy "字符串,想把第一个字符'I'改为'Y'.

  • 写回答

1条回答 默认 最新

  • a5156520 2022-05-18 12:08
    关注

    因为把一个字符串字面量,即如“I am a boy.”这样的字符串是const数据,不能用指向这个字符串字面量的指针来改变他。除非把这个字面量给一个数组做初始化赋值时才能进行改变数据。(参考:C Primer Plus第六版第324页)所以可以先用一个数组用这个字符串字面量"I am a boy."进行初始化赋值,再用p指针指向这个数组再进行改变是可以的,如下:

    
    #include <stdio.h>                                    
        int main()
        {
            void change(char p[]);
            char a[] = "I am a girl.";
            change(a);
            printf("%s\n", a);
        return 0;
        }
        void change(char *p)
        {
            char  str [20]= "I am a boy.";
            p=str;
            *p = 'Y';
            printf("%s\n", p);
        }
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 5月26日
  • 已采纳回答 5月18日
  • 创建了问题 5月17日