我正在尝试实现我自己的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";
是指向字符串文本的指针,因此不得修改所指向的内容。