Bom dia. Estava fazendo meu estudo sobre ponteiros em C e me deparei com um código para contagem de caracteres numa string. Entretanto, eu tentei refazer o código, porém sem usar função, fazendo todo o processo na main. Abaixo o programa "original" porém com algumas alterações e comentários que eu fiz, pra conseguir entender melhor. Eu entendi o código, porém queria saber o por que de não estar funcionando fora de uma função.
#include<stdio.h>
#include<stdlib.h>
#include<locale.h>
void contagem(char *name); /* Protótipo da função */
main()
{
setlocale(LC_ALL,"portuguese");
char name[100];
char *ptr = name;
char *search_char = &name[6]; /* Quando for escolher a posição do vetor, lembrar de colocar o '&'*/
int size=0;
printf("Insira seu nome : ");
// fgets(name, 100, stdin); --> fgets adiciona uma unidade ao endereço, não sei ao certo se é isso, mas a contagem fica com 1 a mais
gets(name);
contagem(name);
printf("\n*Search_char = %c\n\nSearch_char = %d\n",*search_char, search_char); /* Criei search_char para confirmar se cada */
/* número correspondia a um caractere. */
*search_char='z'; /* Como o ponteiro search_char tem como endereço a posição 7 do vetor name, alterando o *search_char (que controla o conteúdo
dessa posição do vetor) para recebendo o caractere 'z' é como dizer que a posição 7 do vetor irá receber 7*/
search_char = &name[2]; /* Agora ele aponta para a posição 2 do vetor name */
*search_char = 'l'; /* Portanto, *search_char agora irá controlar o conteúdo da mesma, colocando um 'l' na posição 2 do vetor name*/
search_char = name; /* Agora ele aponta para a posição 0 do vetor name */
*search_char = '2'; /* Portanto, *search_char agora irá controlar o conteúdo da mesma, colocando um '2' na posição 0 do vetor name.*/
printf("\n%s\n\n", name);
size = sizeof(char);
printf("Número de bytes do tipo char --> %d",size);
return 0;
}
void contagem(char *name)
{
char *ptr = name;
while(*name!='\0')
{
printf("Valor de name no while --> %d\n----------------------\n",name);
/* O incremento funciona para fazer a contagem de caracteres, pois o tipo char possui 1 byte, então a conta fica exata */
/* Cada número impresso corresponde ao endereço de um caractere do vetor "name" */
name++;
}
printf("ptr - name = número de caracteres inseridos no nome : %d\n\n", (name)-ptr);
}