Chtěl bych se zeptat, jak vsunout jeden řetězec do druhého.
Vím, že to bude asi přes funkci strcat, ale nevím přesně jak
Toto z řetězce vytvoří nový, který bude obsahovat původní i vložený. Možná to nepotřebuješ až takto, ale můžeš se od toho odpíchnout.
char *stary = "pes kocka";
char *vlozit = "ptak ";
int kamvlozit = 4;
if (kamvlozit > strlen(stary)) chyba();
char *novy = malloc((strlen(stary) + strlen(vlozit) + 1) * sizeof(char));
// zacatek
strncpy(novy, stary, kamvlozit);
novy[kamvlozit] = 0;
// vlozeni
strcat(novy, vlozit);
// konec
strcat(novy, stary + kamvlozit);
printf("stary '%s'\nnovy '%s'\n", stary, novy);
stary 'pes kocka'
novy 'pes ptak kocka'
#2 gna
díky moc. Ještě bych se chtěl zeptat, kdyz spustim program, tak mi to vypíše 1. string v pohodě, ale v druhém a třetím jsou na začátku nechtěné znaky, za boha nemůžu najít chybu
ZDROJÁK:
#include <stdio.h>
#include <string.h>
void strins(char pole1[],int i,char pole2[]); //
main()
{
char str1[80] = "Jazyk C - nemozne!";
char str2[80] = " dokaze i ";
char str3[80] = " nekdy";
printf("%s",str1);
strins(str1,10,str2);
printf("\n%s",str2);
strins(str2,20,str3);
printf("\n%s",str3);
}
void strins(char pole1[],int i,char pole2[])
{ int c;
char *novy;
novy=(char *)malloc(strlen(pole1)+strlen(pole2)+1);
strncat(novy,pole1,i);
strcat(novy,pole2);
strcat(novy,pole1+i);
//novy[strlen(pole1)+strlen(pole2)]='\0';
for(c=0;c<strlen(novy);c++)pole2[c]=novy[c];
}
str(n)cat přidává na konec řetězce. Konec řetězce najde podle nulového ukončovacího znaku.
Takže pokud je v tom alokovaném bufferu nějaké smetí, tak se to přidá až za to (na první nalezenou nulu v tom smetí).
Takže můžeš na začátek toho bufferu vložit nulu, aby to jako byl prázdný řetezec, nebo místo strncat použít strncpy (ten prostě kopíruje tam kam jsi zadal).
Podobně strncat a strncpy do cílového bufferu nevloží ukončovací nulu za ten zkopírovaný řetězec (pokud byl delší než požadovaná velikost), takže ji tam zase musíš vložit sám.
Prostě jeden řádek máš jinak než já a jeden ti tam chybí :-) A nakonec bys tu alokovanou paměť měl uvolňovat.
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku