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

- Rejestracja:ponad 18 lat
- Ostatnio:prawie 2 lata
- Postów:155
2
Może za pomocą sprintf?
#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.
Kondzio33
jest blisko, wyswietla sie bat\nbat a nie chcialbym w tym znaku nowej lini, tylko zlaczone batbat

- Rejestracja:około 7 lat
- Ostatnio:ponad rok
- Postów:46
1
chyba najwygodniej użyć memcpy, tutaj akurat przykład dla większej ilości ;)
#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;
}
edytowany 2x, ostatnio: Yerbanos

Mażesz po pamięci.

W sensie? 4 linijki po alokacji kończy się program więc to chyba nie zbrodnia ;)

Na 10 "bat" przydzieliłeś 30 bajtów pamięci, brak '\0' na końcu, więc możesz dostać śmieci przy wydruku. https://wandbox.org/permlink/fH8AEYAjmEk5kTDr#

Nie dość że to zrobiłem to jeszcze tego nie zauważyłem po pierwszej uwadze. Czas iść spać.

- Rejestracja:ponad 19 lat
- Ostatnio:około 5 godzin
1
#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;
}

- Rejestracja:ponad 21 lat
- Ostatnio:około 17 godzin
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:
#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)
edytowany 3x, ostatnio: Azarien

Ma być
CStringOfCountCStrings

Wiem ze moglbym to zrobic printf("%s%s", msg, msg), ale chcialbym miec to w jednej zmiennej

Huh, dałbym se rękę uciąć, że ta funkcja była w bibliotece C... No i bym nie miał ręki.
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.