Вот, пожалуйста.
#include <stdio.h>
int main(void)
{
enum { N = 100 };
char s[N];
char a[] = "CDE";
int b[] = { 50, 80, 20 };
int pos = 0;
for ( size_t i = 0; i + 1 < sizeof( a ); i++ )
{
pos += sprintf( s + pos, "%c%d", a[i], b[i] );
}
s[pos] = '\0';
puts( s );
return 0;
}
Вывод программы:
C50D80E20
Это утверждение
s[pos] = '\0';
требуется только в том случае, если нет значения, добавляемые в массив s
, то есть когда не выполнялся ни один вызов sprintf
.
Если вы хотите получить строку, подобную этой
C50 D80 E20
, просто напишите, например,
pos += sprintf( s + pos, "%c%d%c", a[i], b[i], ' ' );
И если вы хотите удалить последний пробел, вместо
s[pos] = '\0';
напишите
s[ pos == 0 ? pos : pos - 1 ] = '\0';
Вместо функции sprintf
вы могли бы используйте функцию snprintf
. Но это не решит проблему, если вы выделите недостаточно памяти для строки результата, потому что в любом случае вы не получите ожидаемый результат в таком случае.
Что касается функции itoa
, то это не так стандартная C функция.