arrays - Static 在声明字符数组时有什么用?

标签 arrays c static

我正在这样做program来自 Hackerrank in C,我解决了该程序,而没有将我的字符数组“结果”声明为静态。它返回了一个错误,其中我的输出与预期输出不匹配。但是当我在数组“result”的声明中插入关键字“static”时,代码就成功运行了。

这是我的代码片段:

char* timeConversion(char* s) 
{
    int i;
    static char result[100];      // this doesn't work if i remove the word 'static'
    if (s[0]=='1' && s[1]=='2' && s[8]=='A')
        { 
            result[0]='0';
            result[1]='0';
            for (i=2;i<8;i++)
               result[i]=s[i];  
        }
    else if (s[0]=='1' && s[1]=='2' && s[8]=='P')
        for (i=0;i<8;i++)
               result[i]=s[i];
    else
    {
       if (s[8]=='A')
           for (i=0;i<8;i++)
               result[i]=s[i];
       if (s[8]=='P')
       {
           result[0]=s[0]+1;
           result[1]=s[1]+2;
           for (i=2;i<8;i++)
               result[i]=s[i];           
       }        
     }
    return result; 
}

我不明白,这里的Static有什么用?

最佳答案

有两件事:

  1. 您将从函数中返回堆栈分配数组的地址。如果它不是静态的,您只会返回一个不再存在的数组的地址,因为通常情况下,堆栈上的对象在超出范围时(即当函数返回时)会消失)。要从调用代码实际可以使用的函数返回数组,它必须在堆上分配(即使用 malloc)或声明为 static,因为使用 static 限定符声明的函数中的局部变量在函数返回后仍然存在。

  2. 如果声明了没有 static 限定符的变量,但未显式初始化,则它只会获取当时内存中已有的内容。

    如果使用static 限定符声明局部变量或数组,则它会隐式地用零进行初始化。这意味着变量 result 可以用解析的日期/时间值填充,并且保证是一个以 null 结尾的字符串,因为数组中的所有元素都不是由函数已经为零。

关于arrays - Static 在声明字符数组时有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51959880/

相关文章:

javascript - JavaScript 中 3 个图像的数组中仅出现一个图像

javascript - JSON 未定义或 null

arrays - 从位数组的子数组转换为 int,结果不正确

c - C 和汇编之间的链接错误

c - 按发生顺序用不同进程写入同一个文件

Java 同步静态方法 : lock on object or class

php - 在 html 和 php 中复制静态内容的当前标准

java - 使用顺序搜索算法进行字符数组比较?

C 打印两个字符串的第二个字符串值

python - django 找不到静态/css 文件错误 404