массив символов, показывающий пустую попытку добавить вторую строку

Я просто хочу сохранить (добавить/канкатенировать) три мобильных номера в массиве символов. В цикле for я даю три мобильных номера. Я написал функцию для хранения мобильных номеров. Массив символов хранит первый номер мобильного телефона, печатая длину переменной массива. Когда я пытаюсь сохранить второй номер мобильного телефона, массив символов становится нулевым (длина массива равна нулю). На самом деле индекс массива переменных "auth_mob_no" постоянно увеличивается (j++), и для получения второго числа необходимо установить индекс массива переменных "mob_no" равным нулю (k=0). Почему не сохраняются строки после того, как я дал первую строку?

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

char mob_auth(char mob_no[]);
int i,j=0,k=0;

int main()
{
    char num[15];
    for(i=0;i<3;i++)
    {
        scanf("%s",num);
        if(mob_auth(num))
        {
            printf("Mobile Number stored\n");
        }
    }
    return 0;
}

char mob_auth(char mob_no[])
{
    char auth_mob_no[50];
    while(mob_no[k]!='\0')
    {
        auth_mob_no[j]=mob_no[k];
        k++;j++;
    }
    auth_mob_no[j]='\0';
    k=0;
    printf("len:%d\n",strlen(auth_mob_no));
    return 1;
}

Выход:

    input by user: +919999999999
    len:13
    Authicated Mobile Number

    input by user: +918888888888
    len:0
    Authicated Mobile Number

person user6161    schedule 19.11.2016    source источник
comment
Глобальные переменные i, j и k должны быть локальными; односимвольные имена — очень плохой выбор для глобальной переменной.   -  person Jonathan Leffler    schedule 19.11.2016


Ответы (1)


auth_mob_no является автоматической переменной, поэтому ее содержимое исчезнет при выходе из области видимости (в данном случае при возврате из mob_auth).

Чтобы исправить, выполните одно из следующих действий:

  • Добавьте static перед char auth_mob_no[50]
  • Удалите локальную переменную auth_mob_no и сделайте ее глобальной, как вы сделали для j и k.

Также обратите внимание, что строка printf("len:%d\n",strlen(auth_mob_no)); вызовет неопределенное поведение, передав данные неправильного типа в printf().

Используйте правильный спецификатор формата

printf("len:%zu\n",strlen(auth_mob_no));

или привести данные перед передачей (потому что в этом случае длина будет достаточно мала)

printf("len:%d\n",(int)strlen(auth_mob_no));
person MikeCAT    schedule 19.11.2016