Есть ли правильный способ, как положить целое число в строку? [С] - PullRequest
1 голос
/ 12 марта 2020

У меня есть такой код:

char str[100];
int r = 0;
for(int k = 0; k < i;k++){
    str[r++] = y[k];
    sprintf(str[r], str, x[k]);
    r++;
}

Я хочу в массив y У меня есть только буквы c символов (например, C, D ...) и в массив х У меня есть только цифры. Я хочу сделать строку типа "C50D80E20" и т. Д. c. "Но я не знаю, как поместить в строку interger (я знаю, что я неправильно использую sprintf, а также то, что он не должен использоваться в этом случае).

Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 12 марта 2020

Вот, пожалуйста.

#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 функция.

0 голосов
/ 12 марта 2020

Есть ли правильный способ, как положить целое число в строку? [C]

Использовать snprintf().
Результаты проверки.

char str[N];
int len = snprintf(str[r], sizeof str, "%d", x[k]);
if (len < 0 || (unsigned)len >= sizeof str) Handle_Error();
0 голосов
/ 12 марта 2020

Используйте itoa(). Что-то в этом роде:

itoa(y[k], str[r++], 10);

Вот ссылка о itoa().

UPDT:

или как правильно комментатор отмечен - вы можете использовать int + '0'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...