NCities se convierte en 8 en tiempo de ejecución en mi caso de prueba actual. Me aseguro de esto imprimiéndolo a través de printf. Sin embargo, el bucle parece repetirse solo una vez cuando uso i <= nCities. Si uso i <= 8, funciona bien. ¿Por qué es esto?

  int nCities = 0;
  scanf("%d", &nCities);

  if (!nCities == 0)
  {
    printf("Number of cities: %d \n", nCities);

    char tempCity[3];

    for(int i=1; i <= nCities; i++)
    {

      printf("Number of cities: %d \n", nCities);
      scanf( "%s", tempCity );
      printf( "%s", tempCity );

    }
c
0
Asirino 4 oct. 2019 a las 21:08

1 respuesta

La mejor respuesta

Para la entrada "ABC", el código scanf( "%s", tempCity ); pone los tres caracteres "ABC" en tempCity y los termina con un carácter nulo. Sin embargo, tempCity está definido para tener solo tres caracteres, con char tempCity[3];. Dado que los límites de la matriz son superados por scanf, el comportamiento resultante no está definido por el estándar C.

Solucione esto haciendo que tempCity sea lo suficientemente grande para contener todos los datos requeridos y / o limitando el scanf especificando un ancho de campo máximo, como %3f. (Tenga en cuenta que con %3f, tempCity debe definirse como char tempCity[4], para permitir tres caracteres más el carácter nulo).

0
Eric Postpischil 4 oct. 2019 a las 18:28