此问题在此处已有答案:
error: function returns address of local variable(8个答案)
2天前关闭。
我试图在C中复制返回堆栈变量的问题,但它没有像我预期的那样工作。lowercase3是我期望返回本地char数组地址的函数:
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
char *lowercase3(const char* str) {
char copy[strlen(str) + 1];
for (int i = 0; i <= strlen(str); i++) {
copy[i] = tolower(str[i]);
}
return copy;
}
int main() {
char stack[13] = "Le Land";
char heap[13] = "Standford";
char const* const_literal = "Hello World!";
char* result1 = lowercase3(stack);
char* result2 = lowercase3(heap);
char* result3 = lowercase3(const_literal);
// print stack heap and const_literal
printf("stack: \"%s\", result: \"%s\"\n", stack, result1);
printf("heap: %s, result: %s\n", heap, result2);
printf("const_literal: %s, result: %s\n", const_literal, result3);
}
但是,当返回copy时,它只返回null。
我运行了调试器,变量“copy”是一个值为leland的char数组。所以我希望它返回堆栈变量“copy”的地址。为什么函数在这里返回null?
1条答案
按热度按时间klsxnrf11#
未定义行为
这返回一个指向函数本地内存的指针。这是未定义的行为。
考虑使用更好的编译器
我还建议使用一个更好的编译器,clang 16.0.0会给予以下警告:
https://godbolt.org/z/jzdWYz36a