2016-10-10 8 views
1
#include <stdio.h> 

void removeString(char text[], int beg, int remove) 
{ 
    int index; 

    for(index = beg; text[index + remove] != '\0'; index++) 
     text[index] = text[index + remove]; 

    text[index] = '\0'; 
} 

int main(void) 
{ 
    char text [] = "the wrong son"; 
    removeString(text, 3, 40); 
    printf("%s\n", text); 
} 
+0

なぜでしょうか?誰がそれをあなたに言ったのですか? – kaylum

+2

未定義のビヘイビアでエラーを生成する必要はありません。まあ、未定義です。 – dasblinkenlight

+0

メソッドを 'strcpy(text + beg、text + beg + remove);と書き換えることができます。 – EJP

答えて

2

Cには境界チェックがありません。あなたは好きなものを参照することができ、それが意味をなさなくするかどうかはあなた次第です。

プラットフォームやその他の要因によっては、コードがメモリとスタックを破壊するため、ガベージ、メモリ例外、またはその他のランダムなクラッシュが発生する可能性があります。

+0

コードが動作し、私が望む結果が得られます。ガベージ値は返されません。 –

+0

おそらくtext + 43の値は可読なゼロです。 – LoztInSpace

+0

それは私が考えていることです、なぜそれが可読なゼロであるかという理由がありますか? –

関連する問題