请问大神以下C语言代码为什么运行会被崩溃??语法编译没有错,求解

#include
#include
void main(){
char *s,*t="program";
strcpy(s,t);
printf("%s\n",s);
}

#include
void main(){
char *s,*t="program";
strcpy(s,t);
printf("%s\n",s);
}

你都没给指针s分配内存,当然崩溃。

char *s=" ";
要给指针分配内存才可以使用,不然会崩溃。

因为你没有给拷贝的目标字符串开辟空间,目标字符串改为:char s[20]={0}就好,只要目标字符串开辟的空间大于等于源字符串就好。

你的char * 指针s没有初始化,所以它是一个野指针,然后你的strcpy(s,t);语句等于是去操作一个野指针,这是很危险的,任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,也就是说他可能指向一段你现在正在使用的程序所占用的内存,然后你现在要去修改它,等于是要修改别的程序,这是不被允许的。所以,你应该写成char * s = NULL;

对指针的操作实际上是对内存地址的操作,在使用指针前,需要对其赋值,使它指向一块合法的内存地址。
题目中的代码可以修改如下:

#include <stdio.h>
#include <string.h>

int main()
{
    char chr[40]={};
    char *s = chr;
    char *t="program";
    strcpy(s,t);
    printf("%s\n",s);
}

如果对您有帮助,请点击采纳答案好吗,谢谢~~

信不信你就这样拷贝,你的电脑会爆炸?!