ページ 11

'\0'が無視される?

Posted: 2014年4月19日(土) 21:43
by koiroke
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;
}

Re: '\0'が無視される?

Posted: 2014年4月19日(土) 21:52
by box
変数 i (0のまま不変のように見える)の意味は何でしょうか?
また、main関数で ch を出力しないで、どうやって
その現象が起きていると判断されたのでしょうか?
デバッガーのステップ実行か何かですか?

申し訳ないです

Posted: 2014年4月19日(土) 22:03
by koiroke
boxさんのおっしゃる通り i が全くの無意味になっていました。
きちんとインクリメントさせたらうまくいきました。
こんな些細なミスを投稿してしまい申し訳ないです。
ご指摘ありがとうございました。
おかげ様で助かりました。

Re: 申し訳ないです

Posted: 2014年4月19日(土) 22:33
by box
koiroke さんが書きました: きちんとインクリメントさせたらうまくいきました。
これが、2個目のループにおける s1_len のことを
含んでいるのならばよいのですが…。

もし含んでいないとすると、
s1[s1_len]
という同じ領域に何回も書き込んでいるような気がしてなりません。
つまり、うまくいったように見えるのは「たまたま」ってことで…。