2011-06-20 4 views
2

これは、結果の文字列cが連結された文字列が続き、初めにいくつかのジャンク文字が含まれている私のコード文字列を連結するときに迷惑な文字が表示されるのはなぜですか?

char *c[strlen(a) + strlen(b) + 2]; 
    strcat(c, a); 
    strcat(c, "+"); 
    strcat(c, b); 

です。私は何を間違えたのですか?

+0

、答えはこれまで、それぞれ1つだけを識別するために管理します。 (両方のヒットした私の答えを入力して欲しいと願っています) –

答えて

2
char c[strlen(a) + strlen(b) + 2]; 
snprintf(c, sizeof(c), "%s+%s", a, b); 
5

それは次のようになります。

char *c = malloc (sizeof (char) * (strlen (a) + strlen (b) + 2)); 
c[0] = '\0'; 
strcat(c, a); 
strcat(c, "+"); 
strcat(c, b); 

あなたが行っているので、あなたのルーチンの失敗の原因は次のとおりです。

ポインタの配列として cを宣言
char *c[strlen(a) + strlen (b) + 2]; 

を、また、初期化されていません配列は'\0'です。それはあなたがまたstrcatは、連結時に'\0'を見つけるだろうと、ヌル文字列で配列を初期化する必要が

char c[strlen(a) + strlen (b) + 2]; 

ようにする必要があります。

char *c[strlen(a) + strlen (b) + 2];にエラーが発生しても問題ありませんが、各場所の長さは4バイトであるため、配列にはその文字を収容できます。しかし、これは正しくありません。

+2

正しい宣言ですが、最初のstrcatはまだ問題があります。 –

+0

これはおそらくダウンボットに値するものではありませんが、ここでは問題の中心には達しません。このjustsは、s/heが望むようなスタックを使用する代わりに、ヒープ上のメモリを文字列のために割り当てます。 –

+0

@Arthurは、strcatを開始する前にmemset()を実行する必要があります。 ORはsnprintf()を実行できます。 – Suroot

4

c[0] = '\0';を初期化していない場合は、cに挿入する前に、最初に'\0'までstrcatが検索されます。

+0

strcatの使用法を修正しましたが、変数宣言には依然として問題があります。 –

+0

@Arthur、それは本当です。 –

0

あなたのジャンク文字はcから来ていますが、あなたはcを定義していますが、それらを初期化していないので、いくつかのジャンク値にpoitingしています。

1

char(char *)へのポインタの配列を宣言しています。あなたはcharの配列を宣言する必要があります:あなたは二つの問題を持っている

char c[strlen(a) + strlen(b) + 2]; 
strcat(c, a); 
strcat(c, "+"); 
strcat(c, b); 
関連する問題