C,为什么这段代码可以用数组表示法,而不能用指针表示法



我正在尝试实现我自己的strcpy函数,这是代码:

#include<stdio.h>
#include <stdlib.h>

void Strcat(char *p1,char*p2)
{
    while(*p1!=''){p1++;}; //this increments the pointer till the end of the array (it then points to the last element which is '')
    while(*p2!=''){*p1++=*p2++;};
}
int main()
{
    char txt1[]="hell";
    char txt2[]="o!";
    printf("before :%sn",txt1);
    Strcat(txt1,txt2);
    printf("after :%sn",txt1);
}

一切正常.

但是,当我改变

char txt1[]="hell";
char txt2[]="o!";

char *txt1="hell";
char *txt2="o!";

我面临分段错误,

为什么?

它们(两种初始化方法)不是等效的吗?
"txt1"和"txt2"不是都像指向字符数组第一个元素的指针吗?

字符串文本不可修改,尝试修改它们会调用未定义的行为

char txt1[]="hell";是一个字符数组,因此允许修改其内容。

char *txt1="hell";是指向字符串文本的指针,因此不得修改所指向的内容。

相关内容

  • 没有找到相关文章

最新更新