Hvordan legger jeg til et enkelt tegn til en streng i C?
dvs.
char* str = "blablabla";
char c = 'H';
str_append(str,c); /* blablablaH */
Hvis du vil legge til et tegn i en streng i C, må du først sørge for at minnebufferen som inneholder strengen, er stor nok til å romme et ekstra tegn. I eksempelprogrammet ditt må du allokere en ny, ekstra minneblokk fordi den bokstavelige strengen ikke kan endres.
Her er et eksempel:
#include <stdlib.h>
int main()
{
char *str = "blablabla";
char c = 'H';
size_t len = strlen(str);
char *str2 = malloc(len + 1 + 1 ); /* one for extra char, one for trailing zero */
strcpy(str2, str);
str2[len] = c;
str2[len + 1] = '\0';
printf( "%s\n", str2 ); /* prints "blablablaH" */
free( str2 );
}
Bruk først malloc
til å allokere en ny bit minne som er stor nok til å romme alle tegnene i inndatastrengen, det ekstra tegnet som skal legges til - og den siste nullen. Deretter kaller du strcpy
for å kopiere inndatastrengen inn i den nye bufferen. Til slutt endrer du de to siste byte i den nye bufferen for å legge til tegnet som skal legges til, samt den avsluttende nullen.
char* str = "blablabla";
Du bør ikke endre denne strengen i det hele tatt. Den ligger i et implementeringsdefinert skrivebeskyttet område. Endring av den forårsaker Udefinert oppførsel.
Du trenger en char-array, ikke en string literal.
God lesning: Hva er forskjellen mellom char a[] = "string"; og char *p = "string";
Jeg tror ikke du kan deklarere en streng på den måten i c. Du kan bare gjøre det for const char, og du kan selvfølgelig ikke modifisere en const char siden den er const.
Du kan bruke dynamiske char-array, men da må du ta deg av reallokeringen.
EDIT: denne syntaksen kompilerer faktisk riktig. Du kan likevel ikke endre hva str peker på hvis den er initialisert på den måten du gjør det (fra string literal).