2013-10-08 3 views
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?Почему я не могу объединить две строки вместе?

+1

Вы перезаписаны последнее значение 'Sprintf (ключ, беспорядок),' –

+1

Несмотря на спагетти, можно (а иногда и необходимо) использовать клавишу '+ StrLen (SKEY) 'как назначение для второго' sprintf'. Просто заметьте, что я сказал, что вы * можете *, ** не ** _should_, это ** опасно **, если вы точно не знаете, что делаете. – Jite

+0

также лучше использовать 'snprintf' –

ответ

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

для добавления их отдельно:

sprintf(key,"%s",skey); 
strcat(key, mess); 
+0

как об одном, не расчесывая в то же время –

+0

, к сожалению, не sprintf .. потому что он перезапишет. – sukhvir

+1

@SongZhibo, потому что вы переписываете предыдущее значение с ключом –

1

Вы используете sprintf дважды в тот же буфер, поэтому он получает перезаписаны.

Вы можете использовать strcat так:

strcpy(key, skey); 
strcat(key, mess); 
1

sprintf(key,skey);

Он пишет skey в key.

sprintf(key,mess); 

Он пишет mess в key, переписав ранее списанных skey.

Таким образом, вы должны использовать это:

sprintf(key,"%s%s", skey, mess); 
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); 
} 

Edit:

Версия с calloc заменит malloc и удалить memset:

key = calloc(100, sizeof(char)); 
if(key) { 
    const char * skey = "844607587"; 
+0

Также используйте 'calloc' для получения уже обнуленной памяти – mvp

+0

@mvp Правда, лучше использовать' calloc', если доступно. – user694733

0

ваш код следующим образом

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

результат будет "привет мир"

вы можете изменить код следующим образом

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

результат как следует «844607587hello world»

0

код, как показано ниже:

strncpy(key, skey, strlen(skey)); 
strcat(key, mess); 
Смежные вопросы