0
 char* key;

 key=(char*)malloc(100);

 memset(key,'\0',100*sizeof(char));
 char*  skey="844607587";

 char* mess="hello world";


 sprintf(key,skey);

 sprintf(key,mess);
 printf("%s",key);
 free(key);

プリントアウトに「混乱」しかなく、スキーがないのはなぜですか? Cを使用して2つの文字列を結合する他の方法はありますか?

4

7 に答える 7

3
sprintf(key,"%s%s",skey,mess);

それらを個別に追加する場合:

sprintf(key,"%s",skey);
strcat(key, mess);
于 2013-10-08T09:05:51.037 に答える
1

同じバッファーで 2 回使用sprintfしているため、上書きされます。

strcat次のように使用できます。

strcpy(key, skey);
strcat(key, mess);
于 2013-10-08T09:06:44.230 に答える
1

sprintf(key,skey);

に書き込みskeyますkey

sprintf(key,mess);

以前書いmesskeyに上書きして書き込みますskey

したがって、これを使用する必要があります:

sprintf(key,"%s%s", skey, mess);
于 2013-10-08T09:07:53.517 に答える
1
printf("Contcatened string = %s",strcat(skey,mess));
于 2013-10-08T09:11:06.973 に答える
1

フォーマット文字列の欠落に加えて、他にもいくつかの問題がありました。

char* key;
key = malloc(100); // Don't cast return value of malloc in C
// Always check if malloc fails
if(key) {
    memset(key, '\0' , 100 * sizeof(char));
    const char * skey = "844607587"; // Use const with constant strings
    const char * mess = "hello world";
    // sprintf requires format string like printf
    // Use snprintf instead of sprintf to prevent buffer overruns
    snprintf(key, 100, "%s%s", skey, mess); 
    printf("%s", key);
    free(key);
}

編集:

のバージョンcallocは、置き換えmallocて削除しmemsetます:

key = calloc(100, sizeof(char));
if(key) {
    const char * skey = "844607587";
于 2013-10-08T09:11:14.403 に答える
0

コードは次のとおりです。

strncpy(key, skey, strlen(skey));
strcat(key, mess);
于 2013-10-08T10:50:35.110 に答える
0

あなたのコードは次のとおりです

sprintf(key,skey);
sprintf(key,mess);
printf("%s",key);

結果は「hello world」になります

コードを次のように変更できます

sprintf(key, "%s%s", skey, key);
printf("%s",key);

結果は「844607587hello world」

于 2013-10-08T09:12:14.707 に答える