Duplikowanie lancuchu znakow w c

Duplikowanie lancuchu znakow w c
K3
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 34
0

Czesc, zastanwiam sie jak w jezyku C zduplikowac napis, mam na mysli to że ze zmiennej msg = "bat" tworze dupMsg = "batbat"
Wiem ze moglbym to zrobic printf("%s%s", msg, msg), ale chcialbym miec to w jednej zmiennej

artur_waw
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 155
2

Może za pomocą sprintf?

Kopiuj
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char *s = "bat";
    char *r = malloc(sizeof(char) * strlen(s) * 2 + 1);
    
    sprintf(r, "%s%s", s, s);
    
    printf("%s", r);

    return 0;
}

Pisane na szybko więc nie daję głowy że dobrze policzyłem rozmiar bufora do zapisu.

Yerbanos
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 46
1

chyba najwygodniej użyć memcpy, tutaj akurat przykład dla większej ilości ;)

Kopiuj
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <stdlib.h>

#define TIMES 10

int main(void)
{
    char *bat = "bat";
    char *bats = calloc(TIMES * strlen(bat)+1, sizeof(char) );

    for(uint32_t i=0; i<TIMES; i++) {
        memcpy(bats+(i*strlen(bat)), bat, strlen(bat));
    }

    printf("%s", bats);
    free(bats);
    return 0;
}
_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
1
Kopiuj
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
    char *bat = "bat";
    const int TIMES=3;

    char *bats=strcpy((char*)malloc(TIMES*strlen(bat)+1),bat);
    for(int i=1;i<TIMES;++i)  strcat(bats,bat);
    printf("%s", bats);
    free(bats);
    return 0;
}
Azarien
  • Rejestracja: dni
  • Ostatnio: dni
1

Dotychczas niestandardowa (a ściślej: ze standardu POSIX) funkcja strdup() ma się znaleźć w nadchodzącym standardzie C23, więc można jej użyć jeśli jest dostępna:

Kopiuj
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    const char* s = "bat";
    const char* r = strdup(s);

    printf("%s", s);
    printf("%s", r);

    return 0;
}

(pod Visual Studio trzeba dodać zmienną preprocesora _CRT_NONSTDC_NO_DEPRECATE bo inaczej będzie bzdurny error)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.