Dlaczego odczytuję pointer, a nie wartość w tablicy?

0

Witam.

Jestem początkujący, sorry za banalne pytanie. Mam następujący kod :

#include <stdio.h>
#include <stdlib.h>

int lenght(char string[]) {
	
	int index;
	for (index=0; string[index]!="\0"; index++) {
	continue; }
	return index;
}

int main () {
	
	char line[100];
	while(1){
		
		printf("Enter a new line : \n");
		fgets(line, sizeof(line), stdin);
		printf("New lenght : %d\n", lenght(line));
	}
}

Chcę policzyć funkcją "lenght" ile jest zer w danym ciągu zapisanym w tablicy. Pewnej książce do C piszą, że w ten sposób będę mógł wprowadzić kolejne linie tekstu, a ich ilość będzie się wyświetlać i powiększać z każdą nową linią. Chcę to sprawdzić, ale pierwszy problem to warning podczas kompilacji : "comparison between pointer and integer" w linijce z pętlą for w funkcji lenght. Jeśli dobrze rozumiem - kompilator mówi mi, że string[index] to pointer, a nie wartość tablicy z danym indeksem, tak jakbym sobie życzył. Dlaczego tak jest? No i po kompilacji program się zawiesza po wpisaniu pierwszej linijki - pewnie to przez tą pętle while(1), ale z drugiej strony dlaczego tak jest? Wydaje mi się, że pętla powinna czekać z każdym wykonaniem, aż wpiszę kolejną i kolejną linię.

Dzięki.

0

W for zamist

"\0"

spróbuj '\0'

.
Jeśli chcsz sumować te znaki to w while'u coś takiego: 
```c
suma += lenght(line);

i wypisywać sumę.

0

Taka funkcja już istnieje i nazywa się strlen:

size_t strlen(const char *str)
  {
   const char *tmp=str;
   while(*tmp) ++tmp;
   return tmp-str;
  }
0

Co do funkcji to chodziło mi o policzenie nowych linii, a nie ilości znaków. Zmieniłem więc funkcję tak, żeby to robiła, a jeśli chodzi o tamten warning to jak kolega słusznie zauważył - pomogło '\0' zamiast "\0". Aha, no i gwoli ścisłości length, zamiast lenght :)

#include <stdio.h>
#include <stdlib.h>

int length(char string[]) {
	
	int index,i=0;
	for (index=0; string[index]!='\0'; index++) {
	continue; }
	if (string[index]=='\0')
	i++;
	
	return i;
}

int main () {
	
	char line[100];
	int sum = 0;
	while(1){
		
		printf("Enter a new line : \n");
		fgets(line, sizeof(line), stdin);
		sum += length(line);
		printf("New length : %d\n", sum);
	}
}

Dzięki za pomoc!

0

WTF ? O to ci pewnie chodziło:

#include <stdio.h>
#include <stdlib.h>
 
int main ()
  {
   char line[100];
   int sum;
   for(sum=1;;++sum)
     {
      printf("Enter a new line:\n");
      fgets(line,sizeof(line),stdin);
      printf("New lenght : %d\n",sum);
     }
   return 0;
  }

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