【问题标题】:Return 2d char array in C在C中返回二维字符数组
【发布时间】:2016-04-04 12:11:31
【问题描述】:

我想将二维字符数组作为函数的输入(实际上我的二维数组是全局的,函数没有输入),更改其中的值,然后返回另一个二维字符数组。

char stoixeia[50][7];
int main(int argc, char *argv[])

。 . .

if (strcmp(answer, "Gift")==0) 
        {
            gift();
        } 


char gift ()
    {
     int i,j,m;
     int wrong=0;
     int k=0;
     char usern[50];
     while(wrong=0)
    {

     printf("Enter the username that you want to Gift:\n");
     scanf("%s", &usern);
     for (i=0; i<50; i++)
    {
     if (*usern==stoixeia[i][0])
     {
     wrong=1;
     k=i;
     }
     }

     }  
      m=strlen(usern);
      for(i=0; i<m; i++)
      {
        stoixeia[k][6]= stoixeia[k][6] + 10;
      }



      return stoixeia[50][7];

     }  

我的想法是,如果我将数组声明为全局数组,我的函数中的所有内容都会发生变化,并且数组将得到“更新”。编译器没有显示任何错误,但是当我运行程序并且我的answerGift 时,.exe 停止工作。你能给我什么建议吗?谢谢

【问题讨论】:

  • 1 stoixeia[50][7]; 超出范围。 2. 要返回一个数组,你至少需要有一个char **
  • 顺便说一句 while(wrong=0) --> while(wrong==0)
  • @SouravGhosh “超出范围”是什么意思?它在图书馆下
  • @BLUEPIXY 哦,是的,现在它没有崩溃,但不知何故,当我在 usern 中输入用户名时,它什么也没找到,它总是要求我提供另一个用户名
  • "我的想法是,如果我将我的数组声明为全局数组,我的函数中的所有内容都会发生变化,并且该数组将得到“更新”。" -- 是的。真的。所以,你不需要返回数组。

标签: c arrays function char


【解决方案1】:

你的函数必须是这样的:

您不需要返回值,因为您直接更改了全局变量。

void gift ()
{
    int i,j,m;
    int wrong=0;
    int k=0;
    char usern[50];
    while(wrong==0) /* replace = by ==*/
    {

        printf("Enter the username that you want to Gift:\n");
        scanf("%s", usern);
        for (i=0; i<50; i++)
        {
            if (usern[i]==stoixeia[i][0])
            {
                wrong=1;
                k=i;
            }
        }
    }  
    m=strlen(usern);
    for(i=0; i<m; i++)
    {
        stoixeia[k][6]= stoixeia[k][6] + 10;
    }
}

【讨论】:

  • 编译器向我展示:[警告] return 使指针从整数而不进行强制转换
  • stoixeia 的类型不是 char**
  • 看,我改变了 `if (usern[i]==stoixeia[i][0])`,就像你说的那样,该功能运行良好。我没放char **
  • 请使用适当的缩进并从scanf中删除&amp;
  • "/* you should initialize stoixeia to 0 via memcpy for example */" -- 为什么? stoizeia为全局数组,自动初始化为0。
【解决方案2】:

如前所述,请使用**gift() 了解更多信息,请参阅here

【讨论】: