Различные результаты при переборе строки и печати в определенной позиции (C)

Я изучаю C, и проблема, с которой я сталкиваюсь, заключается в том, что я перебираю строку до strlen()Я ожидаю, что будет напечатан нулевой символ (ничего), но вместо этого я просто продолжаю получать '.' - тогда как если я распечатаю array[strlen(array)]Я ничего не получаю (нулевой символ). Что здесь происходит?

    #include <stdio.h>
    #include <string.h>
    #include <cs50.h>

    int main(void)
    {
         char *mystring;
         printf("Enter a string: ");
         mystring = GetString();

         //Prints '.' for mystring[i] when i = strlen(mystring)
         for (int i = 0, j = strlen(mystring); i <= j; i++){
              printf("The %dth character is: %c.\n", i+1, mystring[i]);
         }

         //Skips the line printing nothing ('\0')
         printf("The last char is %c\n", mystring[strlen(mystring)]);

         return 0;
    }

2 ответа

Вы на самом деле печатаете эту точку каждый раз (сразу после %c): "The %dth character is: %c.\n", Когда вы вводите нулевой символ %c не будет печатать что-либо, так как оно пустое, и все, что вы видите, это точка после.

За \0 ничего не будет напечатано. Но у тебя есть . после %c в printf заявление-

printf("The %dth character is: %c.\n", i+1, mystring[i]);

Благодаря этому .при печати \0 он будет печатать только .(Для нуля это ничего не будет печатать).

printf("The %dth character is: %c\n", i+1, mystring[i]); //remove that . and try!
Другие вопросы по тегам