返回局部变量指针 - C.

时间:2015-03-10 19:53:20

标签: c pointers

我正在尝试将C中的函数写入return,该函数与传递给函数的字符串相反。

传入字符串后,我声明一个本地char []来填充字符串的反面。

但是,当我编译程序时,我会收到一条警告,指出warning: function returns address of local variable return test;

我是否可以从C?

中的函数返回局部变量指针
char *reverseString(char *str)
{
    int i, j;
    char test[strlen(str)];

    if(str == 0)
        return;

    for(i = 0, j = strlen(str); i < strlen(str), j >= 0; i++, j--)
        str[j] = test[i];

    return test;
}

1 个答案:

答案 0 :(得分:3)

  1. 字符串需要更多空间,strlen()为您提供字符数,但c字符串使用额外字符标记字符串的结尾,'\0' ascii {{ 1}}字符,因此始终需要nul来复制字符串。

  2. 在解除引用后,您1 + strlen(otherString)检查str。这没有意义,请先检查NULL,然后致电NULL

  3. 以这种方式使用strlen()并不是一个好主意,因为在c中字符串长度没有存储在任何地方,调用strlen()基本上就这样计算字符串

    strlen()

    在那里你可以看到终止size_t strlen(const char *string) { size_t count = 0; while (*string++ != '\0') count++; return count; } 的重要性,以及为什么你不应该在一个循环中为'\0'调用长度不变的字符串。

  4. 如果返回局部变量的地址,它将无法正常工作,因为它会在函数返回时被释放,因此您需要使用动态分配,因为存在{{1}这使得它很容易,所以在你的情况下它会是这样的

    strlen()