2016-11-19 52 views
0

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

全局变量'i','j'前投中的数据和'k'应该是本地的;单个字符名称对于全局变量来说是一个非常糟糕的选择。 –

回答

2

auth_mob_no是自动变量,所以它的内容将在离开其范围(从mob_auth在这种情况下返回)消失。

要纠正,做到两者之一:

  • 添加staticchar auth_mob_no[50]
  • 取消本地变量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));