'\0'が無視される?

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
koiroke

'\0'が無視される?

#1

投稿記事 by koiroke » 12年前

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;
}

box
記事: 2002
登録日時: 15年前

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

#2

投稿記事 by box » 12年前

変数 i (0のまま不変のように見える)の意味は何でしょうか?
また、main関数で ch を出力しないで、どうやって
その現象が起きていると判断されたのでしょうか?
デバッガーのステップ実行か何かですか?
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

koiroke

申し訳ないです

#3

投稿記事 by koiroke » 12年前

boxさんのおっしゃる通り i が全くの無意味になっていました。
きちんとインクリメントさせたらうまくいきました。
こんな些細なミスを投稿してしまい申し訳ないです。
ご指摘ありがとうございました。
おかげ様で助かりました。

box
記事: 2002
登録日時: 15年前

Re: 申し訳ないです

#4

投稿記事 by box » 12年前

koiroke さんが書きました: きちんとインクリメントさせたらうまくいきました。
これが、2個目のループにおける s1_len のことを
含んでいるのならばよいのですが…。

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

閉鎖

“C言語何でも質問掲示板” へ戻る