【问题标题】:char array showing empty trying to append second stringchar 数组显示空试图附加第二个字符串
【发布时间】:2016-11-19 02:34:08
【问题描述】:

我只想在一个字符数组中存储(追加/连接)三个手机号码。在 for 循环中,我给出了三个手机号码。我写了一个函数来存储手机 数字。 char 数组通过打印数组变量的长度来存储第一个手机号码。当我尝试存储第二个手机号码时,char 数组变为空(数组的长度为零)。实际上,变量数组“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

【问题讨论】:

  • 全局变量ijk应该是本地的;单个字符名称对于全局变量来说是一个非常糟糕的选择。

标签: c arrays pointers


【解决方案1】:

auth_mob_no 是自动变量,因此其内容将在退出其范围时消失(在这种情况下从 mob_auth 返回)。

要更正,请执行以下任一操作:

  • char auth_mob_no[50]之前添加static
  • 删除局部变量 auth_mob_no 并使其成为全局变量,就像对 jk 所做的那样

另请注意,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));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-27
    • 2013-01-04
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    • 2017-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多