方法1:
voidmain()
{
char*a="helloworld!",b[20];
inti;
for(i=0;*(a+i)!=\0;i++)
*(b+i)=*(a+i);
*(b+i)=\0;
printf("stringais:%s\n",a);
printf("stringais:%s\n",b);
}
方法2:
voidmain()
{
chara[]="helloworld!",b[20];
inti;
for(i=0;*(a+i)!=\0;i++)
*(b+i)=*(a+i);
*(b+i)=\0;
printf("stringais:%s\n",a);
printf("stringais:%s\n",b);
}
兩種方法比較:
(1)字符數組是將字符串中的每一個字符存放在數組的元素中,而字符指針變量中存放的是字符串的首地址,而不是將字符串放到字符指針變量中。
(2)初始化形式一樣,但意義不一樣。
char*a="helloworld!";
等價於
char*a;
a="helloworld!";
而對字符數組的初始化:
chara[20]="helloworld!";
不能等價於
chara[20];
a[20]="helloworld!";
(3)賦值方式不一樣,字符數組不能整體賦值,但字符指針變量是一個變量,所以可以整體賦值。例如:
chara[20];
a="helloworld!";
是錯誤的,但
char*a;
a="helloworld!";
是正確的。
(4)如果定義一個字符數組,在編譯時為它分配內存單元,用來存放字符串中的字符和字符串結束標誌;而定義一個字符指針變量,在編譯時隻給字符指針變量分配內存單元,而不為字符串分配空間。例如:
charstr[20];
scanf("%s",str);
是可以的,而用下麵的方法:
char*p;
scanf("%s",p);
目的是為了輸入一個字符串,編譯時程序能夠通過,但運行時會出問題。如果把字符指針變量和字符數組聯合起來使用又可以,如:
charstr[20],*p;
p=str;
scanf("%s",p);
因此,不管使用哪種方式來處理字符串,一定要謹慎小心。