我用strcpy为什么没效果?

来源:百度知道 编辑:UC知道 时间:2024/05/03 04:05:54
char *p="abcde";
strcpy(p,"abc");
printf("%s",*p);
编译没有问题,但执行什么都没有打印出来。怎么回事?
而把打印语句改为printf("%s",p);还是不对。
但如果这样char *p="abcde"; printf("%s",p); 就可以打印出abcde了。
还有三楼的程序把printf("%s\n", *p); 改成printf("%s\n", p);可以正常打印了。
是不是strcpy()里的第一个参数只能接受字符数组的指针而不能接受字符串常量的指针?

首先,你的printf函数参数不正确,要打印字符串,需要提供字符串首地址。如:
printf("%s", p);

然而,你即使这样修改了,这个程序仍然会崩溃。因为"abcde"是一个字符串常量,它保存在静态常量存储区,它是不允许被更改的。

如果你吧声明语句
char *p = "abcde";
改为
char p[] = "abcde";
才会成功运行并打印"abc"。

对于您的补充:
你自己也说了,p是字符串常量的指针,常量意味着什么?不可以修改嘛!既然不可以修改,你还要往里面拷贝东西??

首先... 你在Windows里这么干会出异常...

printf("%s", p) 这里不要用*p

因为字符串 定义 貌似是单引号 ''

程序崩了吧,*p指向的是静态变量。
char p[10];
strcpy(p, "abc");
printf("%s\n", *p);

下面是标准用法:
#include <stdio.h>
#include <string.h>

void main()
{
char s[10]="abcde";
char *p=s;
strcpy(p,"abc");
printf("%s",p);
}

char *strcpy(
char *strDestination,
const char *strSource
);