strcatを実装してみました。
文法的には正しいと思うのですが、関数strcatの1つ目のループを抜けられません。
Visualstdioでコーディングしています。環境的な問題なのでしょうか?ご教授願います。
以下にすべてのソースコードを掲載します。宜しくお願いします。
#include <stdio.h>
char* strcat ( char* s1, const char* s2);
int main(){
char ss [ 10 ] = "ABC";
char* ch;
ch = strcat ( ss, "xyz" );
}
char* strcat ( char* s1, const char* s2){
int i;
int s1_len;
s1_len = 0;
i = 0;
while ( * ( s1 + i ) != '\0'){
s1_len++;
}
i=0;
while ( * ( s2 + i ) != '\0'){
* ( s1 + s1_len ) = * ( s2 + i ) ;
}
return s1;
}
'\0'が無視される?
Re: '\0'が無視される?
変数 i (0のまま不変のように見える)の意味は何でしょうか?
また、main関数で ch を出力しないで、どうやって
その現象が起きていると判断されたのでしょうか?
デバッガーのステップ実行か何かですか?
また、main関数で ch を出力しないで、どうやって
その現象が起きていると判断されたのでしょうか?
デバッガーのステップ実行か何かですか?
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
Re: 申し訳ないです
これが、2個目のループにおける s1_len のことをkoiroke さんが書きました: きちんとインクリメントさせたらうまくいきました。
含んでいるのならばよいのですが…。
もし含んでいないとすると、
s1[s1_len]
という同じ領域に何回も書き込んでいるような気がしてなりません。
つまり、うまくいったように見えるのは「たまたま」ってことで…。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。