これは実際にK & RCブックを通過しているので、私はそれが古くて、セキュリティ面が、私は単にexcercisesをしようとしています)私は指針で私自身のstrcatを実装する必要があるエクササイ5-2で遊んでいた。私のコードは次のとおりです:Cのポインタを学ぶ私は実際にこれが動作していない理由を把握できません(K&R excercise 5-2)
#include <stdio.h>
#include <stdlib.h>
char *Strcat(char *string1, const char *string2);
int main(void){
char string1[100]="hello";
char string2[100]="1234";
printf("%s",Strcat(string1,string2));
return 0;
}
char *Strcat (char *string1, const char *string2){
int i=0;
char *temp=string1;
while(*string1){// move the pointer to find the end of the string
++string1;
}
while(*string1++=*string2++)//copy string 2 at the end of string 1
;
puts(string1);//print string 1 concatenated with string 2
return temp;//send back temp pointing to string1 for printing
}
私は文字列1を印刷しようとすると空白が表示されるのですか?それは全体の文字列を印刷すべきではありませんか?私はそれが '\ 0'を見つけるまでprint関数を実行するので、私はtempを印刷しても問題ありませんが、文字列1でしようとすると '\ 0'にポインタがstring1 [0]それはおそらく単純なものですが、なぜこれが起こっているのかわかりません...
何か助けていただきありがとうございます!ありがとう!
'++ string1'。あなたは元の文字列の始まりを失ってしまいました。 – kaylum
こんにちはKaylum!早速のお返事ありがとうございます!私は思っていたので、どういうわけか私の考えは、魔法のように関数putsがstring1の先頭にポインタを戻すことを考え続けていましたが、今のところstring1が私はそれを動かした位置づけになった。 もう一度おねがいします! :D – jaferic
代わりに 'puts(temp);'を使用してください。これはtempの値です –