Łańcuchy znaków - (czysty C)

0

Witam,
Stworzyłem sobie taką o to funkcję, która zwraca długość podanego jako parametr ciągu znaków:

#include <stdio.h>
#include <string.h>
int DlugoscCiagu(const char* napis);
int main()
{
    char ciagznakow[]="Matematyka pasja informatyka.";
    printf("Dlugosc podanego jako parametr ciagu znakow wynosi: %d", DlugoscCiagu(ciagznakow));
    return 0;
}
int DlugoscCiagu(const char* napis)
{
    int length=0;
    length=strlen(napis);
    return length;
}

Wszystko działa zwraca: 29 czyli poprawnie, ale teraz mam następujący problem, chciałbym, żeby znak końca łańcucha również został zwrócony, więc z materiałów, z których korzystałem rozumiem, że w funkcji, powinienem zamienić strlen na sizeof: length=sizeof(napis) i to moim zdaniem powinno zwrócić o 1 więcej czyli 30. Niestety cały czas zwraca wartość 4. W czym tkwi problem?

#include <stdio.h>
#include <string.h>
int DlugoscCiagu(const char* napis);
int main()
{
    char ciagznakow[]="Matematyka pasja informatyka.";
    printf("Dlugosc podanego jako parametr ciagu znakow wynosi: %d", DlugoscCiagu(ciagznakow));
    return 0;
}
int DlugoscCiagu(const char* napis)
{
    int length=0;
    length=sizeof(napis);
    return length;
}

Zdjęcie:
user image

0

http://ideone.com/KLnDt8
Chcesz o 1 więcej?

int DlugoscCiagu(const char* napis)
{
    return strlen(napis)+1;
}
0

Bardziej mi chodzi o to, dlaczego drugi kod zwaraca wartość 4, a nie 30, co powinienem poprawić?

3

W C++ tablice nie mogą być przesyłane przez wartość więc sizeof(napis) to jest to samo co sizeof(&napis[0]).

Jeżeli chcesz znać długość łańcucha to użyj strlen(napis) a jeżeli ilość elementów tablicy to prześlij dodatkowy argument jako ilość elementów tablicy

1 użytkowników online, w tym zalogowanych: 0, gości: 1