返回局部变量指针 – C

我正在尝试在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 = 0; i++, j--) str[j] = test[i]; return test; } 

  1. 你需要更多的字符串空间, strlen()给你字符数,但c字符串使用额外的字符来标记字符串的结尾, '\0' 1 + strlen(otherString) nul字符,所以1 + strlen(otherString)是总是需要复制一个字符串。

  2. 在解除引用后检查str是否为NULL 。 这没有意义,先检查NULL ,然后调用strlen()

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

     size_t strlen(const char *string) { size_t count = 0; while (*string++ != '\0') count++; return count; } 

    在那里你可以看到终止'\0'重要性,以及为什么你不应该在循环中为长度不变的字符串调用strlen()

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

     char *reverseString(char *str) { size_t index; char *test; size_t length; if (str == NULL) return NULL; length = strlen(str); test = malloc(1 + length); if (test == NULL) return NULL; /* perform string reversal */ for (index = 0 ; index < length ; index++) test[index] = str[length - index - 1]; /* add the `nul` terminator */ test[length] = '\0'; /* return the newly allocated and initialized data */ return test; }