Re: 還是同一個問題 (c語言)
如果把str3 配置空間,那麼即使 //<----- 這一行存在
執行也會正確
int main(void){
char *str1="abcd";
char *str2 = "1234"; //<-----
char *str3;
str3= (char*) malloc(10);
strcpy(str3,str1);
printf("str3:%s\n",str3);
exit(0);
}
"Alien" <adrianshum.bbs@ptt.cc> 撰寫於郵件新聞:4aP3GV$6TX@ptt.cc...
>※ 引述《"mynews" <noreplay@gmail.com>, 看板: Programming》之銘言:
> : #include <stdio.h>
> : #include <stdlib.h>
> : #include <string.h>
> : int main(void){
> : char *str1="123";
> : char *str4="456";
> : char *str3="789";
> : strcpy(str3,str4);
> : exit(0);
> : }
> : 這程式編譯會過,但是執行會出現錯誤;string 在使用前需要配置空
> : 間,不過我常在很多opensource 看到這類的用法
> : char *__progname = "prog";
> : 這樣用到底是不是正確的用法?安全的使用字串應該使用陣列?
> : char str[20]="prog";
> : 那 chr *string[50] ; (字串陣列) 這種用法安全嗎?
> : 另外也有人這樣使用 chr str[]="prog";
> : 到底那些用法是安全且正確?
>
> 問題不在於配置與否, 而是
> 你的 strcpy 的目標位置是不
> 能改變的 (指向 string literal)
>
> alien
>
> --
> ※ 發信站: 批踢踢實業坊(ptt.cc)
> ◆ From: 202.155.236.82
>
討論串 (同標題文章)
完整討論串 (本文為第 5 之 8 篇):