2017-12-15 32 views
-5

私は基本的にstrcatと同じ機能を作成しました。C concate string余分なスペース

void Mystrcat(char* s, char* t) 
{ 
    int j, i=0; 
    for (j = 0; s[j] != '\0'; j++); 

    for (i = 0; t[i] != '\0'; i++, j++) 
     s[j] = t[i]; 
} 

私は何が欠けているのか理解できません。最後のcharcarterを除いて連結が機能しますが、私はいつも余分にspaceを取得します。

Input: s = "My  " t="House" , output = "My House " 

答えて

4

出力を終了しないと、末尾に'\0'は書き込まれません。あなたは第二のループではなく、古典的なコピーループに加えることができます。

while (s[j++] = t[i++]) 
    ; 

これはターミネータをコピー後を停止します。

コードには未定義の動作がある可能性がありますが、これは余分なスペースとして発生します。あなたの入力は本当に"My ""House"ある場合

また、正しい出力はもちろん、保存入力の最後にすべてのスペースと

"My  House" 

でなければなりません。

コメントに指摘されているように、文字列リテラルは変更できません。もちろん、スペースを割り当てる必要があります。このような

何か:

int main(void) 
{ 
    char s[100] = "My  ", *t = "House"; 
    Mystrcat(s, t); 
    printf("Got '%s'\n", s); 
    return 0; 
} 

このプリントは:

Got 'My  House' 

予想通り。

+1

ループのためにはOKですが、出力する必要があるのは間違っています。その他:文字列リテラルの変更は定義されていません(書き込み不可能な可能性があります)。 –

+0

@ Jean-BaptisteYunès出力部品を明確にしていただけますか? – unwind

+0

あなたはただそれを変更しました...今正しい。 –

関連する問題