C语言指针数组的strcpy命令使用错误,自学中,求解答
#include<stdio.h>
#include<string.h>
int main(){
    char *t[3]={"ilovei","iloveb","ilovez"};
    t[2]="dg";
    printf("%s",t[2]);
    strcpy(t[2],"dg");
}

debug中发现 t[2]="dg";命令可以正常运行,但一运行 strcpy(t[2],"dg"); 就提示
program received signal SIGSEGV,sengmentaion fault.

这两行命令都是往指针数组的第二项进行进行赋值,第二条命令却不能执行。感到很费解,

4个回答

char *t[3]={"ilovei","iloveb","ilovez"};
这么写,字符串在常量区,是只读的。

Permanet_fly
Permanet_fly 回复caozhy: 拷贝字符串就相当于把t[2]指针换了一个指的对象,指向“dg”,而不是对原来的对象进行重新写入,这种理解正确吗?
接近 3 年之前 回复
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复Permanet_fly: 后者是拷贝全部字符串。但是如果strcpy(t, xxx),那么也报错。同样不能写常量里。
接近 3 年之前 回复
Permanet_fly
Permanet_fly 谢谢解答。 t[2]="dg";这条命令理论上这也是对t[2]所指的字符串常量进行了重写写入,与 strcpy(t[2],"dg");的区别在哪??
接近 3 年之前 回复

谢谢解答。
t[2]="dg";这条命令理论上这也是对t[2]所指的字符串常量进行了重写写入,与 strcpy(t[2],"dg");的区别在哪??

t[2]是常量字符串,无法拷贝常量字符串到常量字符串

Permanet_fly
Permanet_fly t[2]=“dg”,这个是对指针的指向进行了更改,这么理解正确吗?谢谢
接近 3 年之前 回复
 1.   char *t[3]={"ilovei","iloveb","ilovez"};           错误,                 定义的是字符类型,后面的值是字符串
 t[2]="dg";                                                           错误                     指针类型的不能直接用等号赋值,可以strcpy
  printf("%s",t[2]);                          
 strcpy(t[2],"dg");
kidults
kidults 回复Permanet_fly: 是的 我看错了
2 年多之前 回复
Permanet_fly
Permanet_fly 第一条定义的是字符数组,应该是可以的
接近 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问