C Academy · Lektion

strlen, strcpy, strcat

Centrale string-funktioner

Lektion 1 af 413 trin

strlen, strcpy, strcat er en gratis C Academy-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i C Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. C Academy-kurset indeholder 4 lektioner i alt.

Strenge i C

I C er en streng blot et array af char, der slutter med et særligt tegn, en null-terminator, '\0'.

Funktionerne i <string.h> bruger denne terminator til at vide, hvor en streng slutter. Uden den læser de forbi slutningen af dit array.

#include <stdio.h>

int main(void) {
    char name[] = "Alice";
    printf("%s\n", name);
    printf("Bytes used: %lu\n", sizeof(name));
    return 0;
}

Inkludering af string.h

For at bruge strengfunktioner skal du inkludere headerfilen:

  • #include <string.h>

Det giver dig strlen, strcpy, strcat, strcmp og flere andre.

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

int main(void) {
    char greeting[] = "Hello";
    printf("Length is %lu\n", strlen(greeting));
    return 0;
}

strlen: optælling af tegn

strlen returnerer antallet af tegn før null-terminatoren. Den tæller ikke selve '\0' med.

Derfor returnerer strlen("cat") 3, selvom arrayet indeholder 4 bytes.

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

int main(void) {
    char word[] = "cat";
    printf("strlen = %lu\n", strlen(word));
    printf("sizeof = %lu\n", sizeof(word));
    return 0;
}

strlen er O(n)

Fordi C-strenge ikke gemmer deres længde, skal strlen gå gennem hvert tegn, indtil den finder '\0'.

Det gør den til en operation på O(n). Undgå at kalde den gentagne gange i en løkkebetingelse for store strenge.

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

int main(void) {
    char msg[] = "programming";
    size_t len = strlen(msg);
    for (size_t i = 0; i < len; i++) {
        printf("%c", msg[i]);
    }
    printf("\n");
    return 0;
}

strcpy: kopiering af strenge

Du kan ikke kopiere strenge med =. Brug strcpy(dest, src), som kopierer src til dest, inklusive null-terminatoren.

Destinationen skal være stor nok til at indeholde kilden plus terminatoren.

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

int main(void) {
    char src[] = "Hello";
    char dest[20];
    strcpy(dest, src);
    printf("%s\n", dest);
    return 0;
}

strcpy og faren for bufferoverflow

Hvis dest er for lille, skriver strcpy forbi bufferen og beskadiger hukommelsen. Det er en klassisk sikkerhedsfejl.

Foretræk strncpy(dest, src, n), som højst kopierer n bytes. Bemærk: strncpy tilføjer muligvis ikke en null-terminator, hvis src er for lang.

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

int main(void) {
    char src[] = "LongString";
    char dest[5];
    strncpy(dest, src, 4);
    dest[4] = '\0';
    printf("%s\n", dest);
    return 0;
}

strcat: sammenkædning af strenge

strcat(dest, src) føjer src til slutningen af dest. Den begynder at skrive ved dests null-terminator og tilføjer en ny til sidst.

dest skal allerede være en gyldig streng med tilstrækkelig ledig plads.

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

int main(void) {
    char buffer[20] = "Hello, ";
    strcat(buffer, "World");
    printf("%s\n", buffer);
    return 0;
}

Opbygning af strenge trin for trin

Du kan kæde strcpy og strcat sammen for at opbygge en streng stykke for stykke.

Start altid med en initialiseret buffer, så den første strcat finder en gyldig terminator.

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

int main(void) {
    char full[50];
    strcpy(full, "Mr. ");
    strcat(full, "John ");
    strcat(full, "Smith");
    printf("%s\n", full);
    return 0;
}

Sikrere sammenkædning med strncat

strncat(dest, src, n) føjer højst n tegn fra src til og tilføjer derefter altid en null-terminator.

Det hjælper med at forhindre overløb, når kildens længde er ukendt.

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

int main(void) {
    char dest[16] = "Data: ";
    char src[] = "1234567890";
    strncat(dest, src, 5);
    printf("%s\n", dest);
    return 0;
}

Returværdier

Både strcpy og strcat returnerer en pointer til dest. Det gør det muligt at indlejre kald, selvom det kan gøre koden mindre læsbar.

strlen returnerer en size_t, som er unsigned. Vær forsigtig, når du sammenligner den med signed heltal.

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

int main(void) {
    char a[20] = "foo";
    char b[] = "bar";
    printf("%s\n", strcat(a, b));
    return 0;
}

Typisk fejl ved allokering

En almindelig fejl er at glemme +1 til null-terminatoren, når størrelsen på en buffer beregnes.

Til en streng med længden n skal du bruge n + 1 bytes. Den samlede længde af to sammenkædede strenge er strlen(a) + strlen(b) + 1.

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

int main(void) {
    char a[] = "abc";
    char b[] = "de";
    size_t needed = strlen(a) + strlen(b) + 1;
    printf("Need %lu bytes\n", needed);
    return 0;
}

Hurtigt tjek

Test din forståelse af strenglængder.

Opsummering

Du har lært de vigtigste funktioner i string.h:

  • strlen tæller tegn før '\0' (O(n)).
  • strcpy kopierer en streng; destinationen skal være stor nok.
  • strcat føjer til en eksisterende streng.
  • Reserver altid plads til null-terminatoren, og foretræk strn*-varianterne af hensyn til sikkerheden.
Gratis at komme i gang

Lær C med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
39
Lektioner
144

Ofte stillede spørgsmål

Er lektionen “strlen, strcpy, strcat” gratis?

Ja — hele teksten til “strlen, strcpy, strcat” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af C Academy-kurset, skal du opgradere til CoddyKit PRO. C Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “strlen, strcpy, strcat”?

Centrale string-funktioner Du øver dig i C Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på C Academy?

Der kræves ingen tidligere erfaring. C Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.

Hvor lang tid tager lektionen “strlen, strcpy, strcat”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne C Academy-lektion?

Ja. Alle C Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. strlen, strcpy, strcat
  2. strcmp og sammenligning
  3. strtok og tokenisering
  4. memcpy og memset
← Tilbage til C Academy