Добавление префикса к строке, которая является int - PullRequest
0 голосов
/ 11 сентября 2018

Есть ли функция, которую я могу использовать, чтобы преобразовать что-то вроде int num = 12; в строку.

В основном у меня есть цикл, в котором хранится строка.Префикс этой строки должен быть int num.Где num продолжает увеличиваться каждый раз при выполнении одной итерации цикла

Я хочу добавить префикс к исходной строке hello world, чтобы вывод выглядел как 12. hello world.

char *original = "Hello world";
char *dot_space = ". ";
int num = 0;
while (num < 200) {
    char *num_string = ""; // Some how I convert the num to a string?
    char *new_string = malloc(sizeof(char) * strlen(original) + strlen(num_string) + strlen(prefix) + 1;
    strcpy(new_string, num_string);
    strcpy(new_string, prefix);
    strcpy(new_string, original);
    printf("%s\n", new_string);

    num++;
}

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

Вы бы использовали sprintf для создания объединенной строки. Конечно, дело в том, чтобы узнать длину номера. Что ж, мы можем использовать для этого локальный массив, а затем скопировать его в последнюю строку.

Что-то вроде

// reserve 4 characters for each octet in the `int`
char num_string[sizeof num * CHAR_BIT / 2];

// sprintf returns the length of the string!
int num_len = sprintf(num_string, "%d", i);

// size of char is exactly 1
char *new_string = malloc(strlen(original) + strlen(prefix) + num_len + 1);

// then concatenate all with one sprintf
sprintf(new_string, "%s%s%s", num_string, prefix, original);

Конечно, если вам повезло использовать Glibc и сказать Linux; или, возможно, BSD, и вам не нужно писать везде, вы можете использовать только asprintf:

// must be before the include
#define _GNU_SOURCE
#include <stdio.h>

char *new_string;
asprintf(&new_string, "%d%s%s", i, prefix, original);

Это соответствует 4 строкам выше.


Обратите внимание, что ваш первоначальный подход strcpy x3 также потерпел бы неудачу; strcpy всегда перезаписывать, начиная с первого символа в целевом буфере; звонки должны были быть strcpy, strcat, strcat.

0 голосов
/ 11 сентября 2018

sprintf (буфер, "% d.% S", num ++, str);

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