This question already has answers here:
Why do I get a segmentation fault when writing to a string initialized with “char *s” but not “char s[]”?
(17个答案)
3年前关闭。
我正在尝试实现自己的strcpy函数,下面是代码:
一切正常。
但是,当我改变
至
我遇到细分错误,
这是为什么 ?
它们(两个初始化方法)不是等效的吗?
“ txt1”和“ txt2”是否都像指向char数组的第一个元素的指针一样?
(17个答案)
3年前关闭。
我正在尝试实现自己的strcpy函数,下面是代码:
#include<stdio.h>
#include <stdlib.h>
void Strcat(char *p1,char*p2)
{
while(*p1!='\0'){p1++;}; //this increments the pointer till the end of the array (it then points to the last element which is '\0')
while(*p2!='\0'){*p1++=*p2++;};
}
int main()
{
char txt1[]="hell";
char txt2[]="o!";
printf("before :%s\n",txt1);
Strcat(txt1,txt2);
printf("after :%s\n",txt1);
}
一切正常。
但是,当我改变
char txt1[]="hell";
char txt2[]="o!";
至
char *txt1="hell";
char *txt2="o!";
我遇到细分错误,
这是为什么 ?
它们(两个初始化方法)不是等效的吗?
“ txt1”和“ txt2”是否都像指向char数组的第一个元素的指针一样?
最佳答案
字符串文字是不可修改的,尝试修改它们会调用未定义的行为。char txt1[]="hell";
是一个字符数组,因此可以修改其内容。char *txt1="hell";
是指向字符串文字的指针,因此您不得修改所指向的内容。