Estoy tratando de verificar si el puntero apunta a algún char.
Me gusta esto:
#include<stdio.h> #include<string.h> #define a 3 int func(char *); int main() { char *s="a"; int type; type=func(s); printf("%d",type); return 0; } int func(char *s) { int type; if(*s=="a") { type=1; } return type; }
Pero constantemente recibo una advertencia: advertencia: comparación entre el puntero y el número entero if(*s=="a")
¿Es posible comparar punteros y enteros?
¿Hay otra manera de resolver este problema?
¿Puedo saber a qué letra apunta *s sin imprimirla?
"a"
no es un carácter, es un literal de cadena. 'a'
es un carácter literal, que es lo que está buscando aquí.
También tenga en cuenta que en su comparación *s == "a"
en realidad es la "a"
que es el puntero, y *s
que es el número entero... El *
desreferencia s
, lo que da como resultado el char
(un número entero) almacenado en la dirección señalada por s
. Sin embargo, el literal de cadena actúa como un puntero al primer carácter de la cadena "a"
.
Además, si arregla la comparación cambiándola a *s == 'a'
, solo está comprobando si el primer carácter de s
es 'a'
. Si desea comparar cadenas, consulte strcmp
.
char
s están encerrados en ''
no ""
#include<stdio.h> #include<string.h> #define a 3 int func(char *); int main() { char value = 'a'; char *s=&value; int type; type=func(s); printf("%d",type); return 0; } int func(char *s) { int type; if(*s=='a') //or if(*s==3) { type=1; } return type; }