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

Łańcuchy znaków - (czysty C)
Blue_Carpet
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 132
0

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

Kopiuj
#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?

Kopiuj
#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

spartanPAGE
  • Rejestracja: dni
  • Ostatnio: dni
0

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

Kopiuj
int DlugoscCiagu(const char* napis)
{
    return strlen(napis)+1;
}
Blue_Carpet
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 132
0

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

MK
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 16
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

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.