2017-01-22 5 views
2

他の文字列の一部が別の文字列に追加される単純なプログラムを作成しようとしています。このコードを実行すると、何も出力されません。申し訳ありませんが、私のC知識は非常に低いです。すべての助けに感謝します。文字列の一部を別の文字列に追加する

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

int main() { 
    char stuff[100] = "Y"; 
    char test[] = "hello", test2[] = "shelllo"; 

    strcat(stuff, test[1]); 
    strcat(stuff, test2[0]); 

    printf("%s\n", stuff); 

    return 0; 
} 

答えて

2

は、あなたはどのようになっているはずですあなたのstrcatから配列のインデックスを削除する必要があります。

strcat(stuff, test); 
strcat(stuff, test2); 

なおtesttest2文字列がありますが、test[1]test2[0]だけで、個々の文字(es)です - strcatは個々の文字ではなく文字列で動作します。

あなたは(つまり、最初の数文字をスキップ)、文字列の部分だけをコピーしたい場合は、ポインタ演算あなたがchar引数でstrcatを呼び出している

strcat(stuff, test + 1); // skip 1st character of test (ie start copying from `e`) 

または、

strcat(stuff, test2 + 3); // skip 3 characters of test2 (ie starting copying from `l`) 
+0

私だけのものに変数の特定の部分を追加します。 – SycoSins

+1

OKポインタ演算を使用する - – artm

+0

を参照してくださいありがとうお返事ありがとうございます。 – SycoSins

2

を使用charへのポインタの代わりに、動作は未定義です。ここで

は、文字列の部分をコピーするソリューションです:strncat()を使用して

  • :それは、最初の引数の末尾にコピーした文字の与えられた数を超えないが。
  • %.*sの形式を使用します。 精度フィールドは、%s形式で、文字列からコピーする最大文字数を指定します。これは10進数または*として指定できます。この場合、精度は文字列引数の前にint引数として渡されます。ここで

例です。

#include <stdio.h> 
#include <string.h> 

int main(void) { 
    char stuff[100]; 
    char test[] = "Hello"; 
    char test2[] = "The world is flat"; 

    /* using strncat */ 
    strcpy(stuff, test); 
    strncat(stuff, test2 + 3, 6); 
    printf("%s\n", stuff); 

    /* safer version using snprintf */ 
    snprintf(stuff, sizeof stuff, "Hello %.*s\n", 5, test2 + 4); 
    printf("%s\n", stuff); 

    return 0; 
} 
+0

おそらく '%。*'の説明は良いでしょう - それはよく使われません。 – artm

+0

ありがとうございます。なぜ私は尋ねてもいいのですが、なぜ2番目のものがもっと安全ですか? – SycoSins

+0

@artm:回答が更新されました。実際に使用されることはめったにありませんが、選択されたケースでは非常に便利です。 – chqrlie

関連する問題