¿Cómo analizar una cadena separada por comas?

Char *strings = "1,5,95,255" 

Quiero almacenar cada número en una variable int y luego imprimirlo.

Por ejemplo, la salida se vuelve así.

Valor1 = 1

valor2 = 5

Valor3 = 95

valor4 = 255

Y quiero hacer esto dentro de un bucle, así que si tengo más de 4 valores en cadenas, debería poder obtener el rest de los valores.

Me gustaría ver un ejemplo para este. Sé que esto es muy básico para muchos de ustedes, pero lo encuentro un poco desafiante.

Gracias

Modificado del ejemplo de cplusplus strtok :

 #include  #include  int main () { char str[] ="1,2,3,4,5"; char *pt; pt = strtok (str,","); while (pt != NULL) { int a = atoi(pt); printf("%d\n", a); pt = strtok (NULL, ","); } return 0; } 

No conozco las funciones mencionadas en los comentarios anteriores, pero para hacer lo que quiera de la forma que me pide, probaría esto o algo similar.

 char *strings = "1,5,95,255"; char number; int i = 0; int value = 1; printf ("value%d = ", value); value++; while (strings[i] != NULL) { number = string[i]; i++; if (number == ',') printf("\nvalue%d = ",value++); else printf("%s",&number); } 

Si no tienes una cadena modificable, usaría strchr . Busca el siguiente , y luego escanea así

 #define MAX_LENGTH_OF_NUMBER 9 char *string = "1,5,95,255"; char *comma; char *position; // number has 9 digits plus \0 char number[MAX_LENGTH_OF_NUMBER + 1]; comma = strchr (string, ','); position = string; while (comma) { int i = 0; while (position < comma && i <= MAX_LENGTH_OF_NUMBER) { number[i] = *position; i++; position++; } // Add a NULL to the end of the string number[i] = '\0'; printf("Value is %d\n", atoi (number)); // Position is now the comma, skip it past position++; comma = strchr (position, ','); } // Now there's no more commas in the string so the final value is simply the rest of the string printf("Value is %d\n", atoi (position)l